diff options
115 files changed, 5835 insertions, 4225 deletions
diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..705b1f022 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,43 @@ +# About this file, see: +# Website: https://editorconfig.org/ +# For Emacs users: https://github.com/editorconfig/editorconfig-emacs +# For Vim users: https://github.com/editorconfig/editorconfig-vim + +root = true + +[*] +indent_style = tab +indent_size = 8 +tab_width = 8 +end_of_line = lf +charset = utf-8 +insert_final_newline = true + +[{Makefile,Makefile.*,makefile,*.mk}] +trim_trailing_whitespace = true +#max_line_length = 80 + +[*.{c,cc,C,cxx,cpp,h,hh,H,hxx,hpp,inc,y}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +#max_line_length = 120 + +[{*.rb,Rakefile,rakefile,*.rake,*.gemspec,*.gembox}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +#max_line_length = 120 + +[*.bat] +end_of_line = crlf +charset = latin1 +#max_line_length = 80 + +[*.{yaml,yml}] +indent_style = space +indent_size = 2 + +[*.md] +indent_style = space +indent_size = 2 diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..dac4cac33 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +# Basic set up + +version: 2 +updates: + + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 135e39ca7..435118e37 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,18 +3,8 @@ name: Build & Test on: [push, pull_request] jobs: - Check-Skip: - if: | - !contains(github.event.head_commit.message, '[ci skip]') && - !contains(github.event.head_commit.message, '[skip ci]') && - !contains(github.event.head_commit.message, '[skip gha]') - runs-on: ubuntu-latest - steps: - - run: echo not skip - - Ubuntu-1604: - needs: Check-Skip - runs-on: ubuntu-16.04 + Ubuntu-1804-gcc: + runs-on: ubuntu-18.04 env: MRUBY_CONFIG: ci/gcc-clang CC: gcc @@ -27,11 +17,24 @@ jobs: - name: Build and test run: rake -m test:build && rake test:run - Ubuntu-1804-gcc: - needs: Check-Skip + Ubuntu-1804-clang: runs-on: ubuntu-18.04 env: MRUBY_CONFIG: ci/gcc-clang + CC: clang + steps: + - uses: actions/checkout@v2 + - name: Ruby version + run: ruby -v + - name: Compiler version + run: ${{ env.CC }} --version + - name: Build and test + run: rake -m test:build && rake test:run + + Ubuntu-2004-gcc: + runs-on: ubuntu-20.04 + env: + MRUBY_CONFIG: ci/gcc-clang CC: gcc steps: - uses: actions/checkout@v2 @@ -42,9 +45,8 @@ jobs: - name: Build and test run: rake -m test:build && rake test:run - Ubuntu-1804-clang: - needs: Check-Skip - runs-on: ubuntu-18.04 + Ubuntu-2004-clang: + runs-on: ubuntu-20.04 env: MRUBY_CONFIG: ci/gcc-clang CC: clang @@ -58,7 +60,6 @@ jobs: run: rake -m test:build && rake test:run macOS: - needs: Check-Skip runs-on: macos-latest env: MRUBY_CONFIG: ci/gcc-clang @@ -73,7 +74,6 @@ jobs: run: rake -m test:build && rake test:run Windows-MinGW: - needs: Check-Skip runs-on: windows-latest env: MRUBY_CONFIG: ci/gcc-clang @@ -88,7 +88,6 @@ jobs: run: rake -m test:build && rake test:run Windows-Cygwin: - needs: Check-Skip runs-on: windows-latest env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true @@ -100,7 +99,7 @@ jobs: cache-version: v1 steps: - uses: actions/checkout@v2 - - uses: actions/cache@v2 + - uses: actions/[email protected] with: path: ${{ env.package-dir }} key: ${{ runner.os }}-cygwin-${{ env.cache-version }} @@ -134,7 +133,6 @@ jobs: run: echo '::set-env name=PATH::C:\windows\System32' Windows-VC: - needs: Check-Skip runs-on: windows-latest env: MRUBY_CONFIG: ci/msvc diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 19fb63b35..ea9f9bd8e 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -8,10 +8,6 @@ on: jobs: CodeQL-Build: - if: | - !contains(github.event.head_commit.message, '[ci skip]') && - !contains(github.event.head_commit.message, '[skip ci]') && - !contains(github.event.head_commit.message, '[skip gha]') runs-on: ubuntu-latest diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index ed1682b05..fb7f62d4a 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -3,21 +3,50 @@ name: ❄️ Lint on: [pull_request] jobs: - yamllint: - name: 🍶 YAML - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: 🧹 YAML Lint - uses: ibiqlik/action-yamllint@v3 markdownlint: name: 🍸 Markdown runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: 🚀 Use Node.js - uses: actions/[email protected] + uses: actions/[email protected] with: - node-version: '12.x' - - run: npm install -g [email protected] + node-version: '14' + - run: npm install -g [email protected] - run: markdownlint '**/*.md' + misspell: + name: 🥛 Check Spelling + runs-on: ubuntu-latest + steps: + - name: 🍒 Check Out + uses: actions/checkout@v2 + - name: 🍅 Install + run: | + wget -O - -q https://git.io/misspell | sh -s -- -b . + - name: 🌶️ Misspell + run: | + git ls-files --empty-directory | xargs ./misspell -error + trailing-whitespace: + name: 🧋 Trailing whitespace + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: 🧹 Check for trailing whitespace + run: "! git grep -EIn $'[ \t]+$'" + yamllint: + name: 🍶 YAML + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.x' # Version range or exact version of a Python version to use, using SemVer's version range syntax + architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install yamllint + - name: 🧹 YAML Lint + run: | + # return non-zero exit code on warnings + yamllint --strict . diff --git a/.github/workflows/oss-fuzz.yml b/.github/workflows/oss-fuzz.yml index 8f2b24f17..0fd505624 100644 --- a/.github/workflows/oss-fuzz.yml +++ b/.github/workflows/oss-fuzz.yml @@ -2,10 +2,6 @@ name: CIFuzz on: [pull_request] jobs: Fuzzing: - if: | - !contains(github.event.head_commit.message, '[ci skip]') && - !contains(github.event.head_commit.message, '[skip ci]') && - !contains(github.event.head_commit.message, '[skip gha]') runs-on: ubuntu-latest steps: - name: Build Fuzzers @@ -20,7 +16,7 @@ jobs: fuzz-seconds: 600 dry-run: false - name: Upload Crash - uses: actions/upload-artifact@v1 + uses: actions/[email protected] if: failure() with: name: artifacts diff --git a/.github/workflows/spell-checker.yml b/.github/workflows/spell-checker.yml deleted file mode 100644 index 7e86e0198..000000000 --- a/.github/workflows/spell-checker.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: 💎 Spellchecker - -on: [pull_request] - -jobs: - misspell: - name: 🧹 Check Spelling - runs-on: ubuntu-latest - steps: - - name: 🍒 Check Out - uses: actions/checkout@v2 - - name: 🍅 Install - run: | - wget -O - -q https://git.io/misspell | sh -s -- -b . - - name: 🌶️ Misspell - run: | - git ls-files --empty-directory | xargs ./misspell -error diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..0a9da963f --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,39 @@ +--- +default_stages: [commit, push] +default_language_version: + # force all unspecified Python hooks to run python3 + python: python3 +minimum_pre_commit_version: "1.20.0" +repos: + - repo: meta + hooks: + - id: identity + - id: check-hooks-apply + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.4.0 + hooks: + - id: check-added-large-files + - id: check-case-conflict + - id: check-merge-conflict + - id: check-yaml + - id: end-of-file-fixer + - id: fix-byte-order-marker + - id: mixed-line-ending + - id: trailing-whitespace + # - repo: git://github.com/Lucas-C/pre-commit-hooks + # rev: v1.1.9 + # hooks: + # - id: forbid-tabs + # - id: remove-tabs + - repo: https://github.com/igorshubovych/markdownlint-cli + rev: v0.26.0 + hooks: + - id: markdownlint + name: Run markdownlint + - repo: https://github.com/adrienverge/yamllint + rev: v1.26.0 + hooks: + - id: yamllint + name: Check YAML files with yamllint + entry: yamllint --strict . + types: [yaml] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2ffd759b1..7e48508aa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,6 +18,15 @@ things in mind before submitting your pull request: * Use mrbgem to provide non ISO features (classes, modules and methods) unless you have a special reason to implement them in the core +## Pre-commit + +A framework for managing and maintaining multi-language pre-commit hooks. +Pre-commit can be [installed](https://pre-commit.com/#installation) with `pip`, `curl`, `brew` or `conda`. +You need to first install pre-commit and then install the pre-commit hooks with `pre-commit install`. +Now pre-commit will run automatically on git commit! +It's usually a good idea to run the hooks against all the files when adding new hooks (usually pre-commit will only run on the changed files during git hooks). +Use `pre-commit run --all-files` to check all files. + ## Coding conventions How to style your C and Ruby code which you want to submit. @@ -3,4 +3,3 @@ LEGAL NOTICE INFORMATION All the files in this distribution are covered under the MIT license (see the file LICENSE) except some files mentioned below: - @@ -17,4 +17,3 @@ 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. - @@ -9,5 +9,3 @@ with all sufficient information, see the ChangeLog file. ** Information about first release v1.0.0 - - @@ -6,7 +6,7 @@ mruby is the lightweight implementation of the Ruby language complying to (part of) the [ISO standard][ISO-standard]. Its syntax is Ruby 2.x compatible. mruby can be linked and embedded within your application. We provide the -interpreter program "mruby" and the interactive mruby shell "mirb" as examples. +interpreter program "mruby", and the interactive mruby shell "mirb" as examples. You can also compile Ruby programs into compiled byte code using the mruby compiler "mrbc". All those tools reside in the "bin" directory. "mrbc" is also able to generate compiled byte code in a C source file, see the "mrbtest" diff --git a/benchmark/bm_ao_render.rb b/benchmark/bm_ao_render.rb index 9381c85b6..e55c34e09 100644 --- a/benchmark/bm_ao_render.rb +++ b/benchmark/bm_ao_render.rb @@ -1,5 +1,5 @@ # AO render benchmark -# Original program (C) Syoyo Fujita in Javascript (and other languages) +# Original program (C) Syoyo Fujita in JavaScript (and other languages) # https://code.google.com/p/aobench/ # Ruby(yarv2llvm) version by Hideki Miura # mruby version by Hideki Miura diff --git a/build_config/ArduinoDue.rb b/build_config/ArduinoDue.rb index ba7271633..9292183e2 100644 --- a/build_config/ArduinoDue.rb +++ b/build_config/ArduinoDue.rb @@ -32,7 +32,7 @@ MRuby::CrossBuild.new("ArduinoDue") do |conf| cc.defines << %w(MRB_HEAP_PAGE_SIZE=64) cc.defines << %w(KHASH_DEFAULT_SIZE=8) cc.defines << %w(MRB_GC_STRESS) - #cc.defines << %w(MRB_NO_STDIO) #if you dont need stdio. + #cc.defines << %w(MRB_NO_STDIO) #if you don't need stdio. #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval end diff --git a/build_config/RX630.rb b/build_config/RX630.rb index d09a74c10..7c3cfc792 100644 --- a/build_config/RX630.rb +++ b/build_config/RX630.rb @@ -18,7 +18,7 @@ MRuby::CrossBuild.new("RX630") do |conf| cc.defines << %w(MRB_HEAP_PAGE_SIZE=64) cc.defines << %w(KHASH_DEFAULT_SIZE=8) cc.defines << %w(MRB_GC_STRESS) - cc.defines << %w(MRB_NO_STDIO) #if you dont need stdio. + cc.defines << %w(MRB_NO_STDIO) #if you don't need stdio. #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval end diff --git a/build_config/chipKITMax32.rb b/build_config/chipKITMax32.rb index 4fe8b4ba2..cb3192610 100644 --- a/build_config/chipKITMax32.rb +++ b/build_config/chipKITMax32.rb @@ -29,7 +29,7 @@ MRuby::CrossBuild.new("chipKITMax32") do |conf| cc.defines << %w(MRB_HEAP_PAGE_SIZE=64) cc.defines << %w(KHASH_DEFAULT_SIZE=8) cc.defines << %w(MRB_GC_STRESS) - #cc.defines << %w(MRB_NO_STDIO) #if you dont need stdio. + #cc.defines << %w(MRB_NO_STDIO) #if you don't need stdio. #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval end diff --git a/build_config/clang-asan.rb b/build_config/clang-asan.rb index 5ee0d9129..19cc53bf0 100644 --- a/build_config/clang-asan.rb +++ b/build_config/clang-asan.rb @@ -1,7 +1,7 @@ MRuby::Build.new do |conf| conf.toolchain :clang # include the GEM box - conf.gembox 'default' + conf.gembox 'full-core' # Turn on `enable_debug` for better debugging conf.enable_sanitizer "address,undefined" diff --git a/build_config/dreamcast_shelf.rb b/build_config/dreamcast_shelf.rb index a92770070..7e7d6a52e 100644 --- a/build_config/dreamcast_shelf.rb +++ b/build_config/dreamcast_shelf.rb @@ -20,7 +20,7 @@ MRuby::CrossBuild.new("dreamcast") do |conf| # C compiler # Flags were extracted from KallistiOS environment files conf.cc do |cc| - cc.command = "#{BIN_PATH}/sh-elf-gcc" + cc.command = "#{BIN_PATH}/sh-elf-gcc" cc.include_paths << ["#{KOS_PATH}/include", "#{KOS_PATH}/kernel/arch/dreamcast/include", "#{KOS_PATH}/addons/include", "#{KOS_PATH}/../kos-ports/include"] cc.flags << ["-O2", "-fomit-frame-pointer", "-ml", "-m4-single-only", "-ffunction-sections", "-fdata-sections", "-Wall", "-g", "-fno-builtin", "-ml", "-m4-single-only", "-Wl,-Ttext=0x8c010000", "-Wl,--gc-sections", "-T#{KOS_PATH}/utils/ldscripts/shlelf.xc", "-nodefaultlibs"] cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] diff --git a/build_config/host-f32.rb b/build_config/host-f32.rb new file mode 100644 index 000000000..a449547ae --- /dev/null +++ b/build_config/host-f32.rb @@ -0,0 +1,14 @@ +MRuby::Build.new do |conf| + # load specific toolchain settings + toolchain :gcc + + # include the GEM box + conf.gembox 'default' + + conf.cc.defines << 'MRB_USE_FLOAT32' + + # Turn on `enable_debug` for better debugging + conf.enable_debug + conf.enable_test + conf.enable_bintest +end diff --git a/build_config/minimal.rb b/build_config/minimal.rb new file mode 100644 index 000000000..579b3f883 --- /dev/null +++ b/build_config/minimal.rb @@ -0,0 +1,4 @@ +MRuby::CrossBuild.new('minimal') do |conf| + conf.toolchain :gcc + conf.cc.defines << 'MRB_NO_STDIO' +end diff --git a/doc/guides/compile.md b/doc/guides/compile.md index a8e35b65c..7a2ff2a44 100644 --- a/doc/guides/compile.md +++ b/doc/guides/compile.md @@ -10,18 +10,19 @@ To compile mruby out of the source code you need the following tools: * C Compiler (e.g. `gcc` or `clang`) * Linker (e.g. `gcc` or `clang`) * Archive utility (e.g. `ar`) -* Parser generator (`bison`) -* Ruby 2.0 or later (e.g. `ruby` or `jruby`) - -Note that `bison` bundled with MacOS is too old to compile `mruby`. -Try `brew install bison` and follow the instruction shown to update -the `$PATH` to compile `mruby`. We also encourage to upgrade `ruby` -on MacOS in similar manner. +* Ruby 2.5 or later (e.g. `ruby` or `jruby`) Optional: -* git (to update mruby source and integrate mrbgems easier) -* C++ compiler (to use GEMs which include \*.cpp, \*.cxx, \*.cc) +* Git (to update mruby source and integrate mrbgems easier) +* C++ compiler (to use mrbgems which include `*.cpp`, `*.cxx`, `*.cc`) +* Bison (to compile `mrbgems/mruby-compiler/core/parse.y`) +* gperf (to compile `mrbgems/mruby-compiler/core/keywords`) + +Note that `bison` bundled with macOS is too old to compile `mruby`. +Try `brew install bison` and follow the instruction shown to update +the `$PATH` to compile `mruby`. We also encourage you to upgrade `ruby` +on macOS in similar manner. ## Build @@ -32,7 +33,7 @@ line on build, call `rake -v`. You can specify your own configuration file by the `MRUBY_CONFIG` environment variable (you can use `CONFIG` for shorthand for `MRUBY_CONFIG`). If the path -doesn't exist, *build_config/${MRUBY_CONFIG}.rb* is used. The default +doesn't exist, `build_config/${MRUBY_CONFIG}.rb` is used. The default configuration is defined in the `build_config/default.rb` file. Those build configuration files contain the build configuration of mruby, for @@ -48,10 +49,10 @@ All tools necessary to compile mruby can be set or modified here. ## Build Configuration -We wish you submit a pull-request to *build_config/**PLATFORM**.rb*, once you +We wish you submit a pull-request to `build_config/PLATFORM.rb`, once you created a new configuration for a new platform. -Inside of the configuration file, the following options can be +Inside the configuration file, the following options can be configured based on your environment. ### Toolchains @@ -134,7 +135,7 @@ end C Compiler has header searcher to detect installed library. -If you need a include path of header file use `search_header_path`: +If you need an include path of header file use `search_header_path`: ```ruby # Searches ```iconv.h```. @@ -228,7 +229,7 @@ end ### Preallocated Symbols -By far, preallocate symbols are highly compatible with the previous versions, so +By far, preallocated symbols are highly compatible with the previous versions, so we expect you won't see any problem with them. But just in case you face any issue, you can disable preallocated symbols by specifying `conf.disable_presym`. @@ -279,7 +280,7 @@ conf.build_mrbtest_lib_only ### Bintest Tests for mrbgem tools using CRuby. -To have bintests place \*.rb scripts to `bintest/` directory of mrbgems. +To have bintests place `*.rb` scripts to `bintest/` directory of mrbgems. See `mruby-bin-*/bintest/*.rb` if you need examples. If you want a temporary files use `tempfile` module of CRuby instead of `/tmp/`. @@ -310,7 +311,7 @@ conf.enable_cxx_exception #### C++ exception disabling. -If your compiler does not support C++ and you want to ensure +If your compiler does not support C++, and you want to ensure you don't use mrbgem written in C++, you can explicitly disable C++ exception, add following: @@ -354,12 +355,12 @@ end ``` All configuration options of `MRuby::Build` can also be used in -`MRuby::CrossBuild`. You can find examples under the *build_config* +`MRuby::CrossBuild`. You can find examples under the `build_config` directory. ### Mrbtest in Cross-Compilation -In cross compilation, you can run `mrbtest` on emulator if +In cross compilation, you can run `mrbtest` on an emulator if you have it by changing configuration of test runner. ```ruby @@ -375,49 +376,42 @@ end ## Build process -During the build process the directory *build* will be created in the +During the build process the directory `build` will be created in the root directory. The structure of this directory will look like this: +- build | +- host | + +- LEGAL <- License description + | +- bin <- Binaries (mirb, mrbc and mruby) | +- lib <- Libraries (libmruby.a and libmruby_core.a) | - +- mrblib + +- mrbc <- Minimal mrbc place | - +- src + +- mrbgems <- Compilation result from mrbgems | - +- test <- mrbtest tool + +- mrblib <- Compilation result from mrblib | - +- tools - | - +- mirb - | - +- mrbc - | - +- mruby + +- src <- Compilation result from C sources The compilation workflow will look like this: -* compile all files under *src* (object files will be stored -in *build/host/src*) -* generate parser grammar out of *src/parse.y* (generated -result will be stored in *build/host/src/y.tab.c*) -* compile *build/host/src/y.tab.c* to *build/host/src/y.tab.o* -* create *build/host/lib/libmruby_core.a* out of all object files (C only) -* create `build/host/bin/mrbc` by compiling *tools/mrbc/mrbc.c* and -linking with *build/host/lib/libmruby_core.a* -* create *build/host/mrblib/mrblib.c* by compiling all \*.rb files -under *mrblib* with `build/host/bin/mrbc` -* compile *build/host/mrblib/mrblib.c* to *build/host/mrblib/mrblib.o* -* create *build/host/lib/libmruby.a* out of all object files (C and Ruby) -* create `build/host/bin/mruby` by compiling *mrbgems/mruby-bin-mruby/tools/mruby/mruby.c* and -linking with *build/host/lib/libmruby.a* -* create `build/host/bin/mirb` by compiling *mrbgems/mruby-bin-mirb/tools/mirb/mirb.c* and -linking with *build/host/lib/libmruby.a* +* compile minimal `mrbc` from `src` and `mrblib` sources + * compile all files under `src` (object files will be stored in `build/host/mrbc/src`) + * compile `mruby-compiler` gem + * create `build/host/mrbc/lib/libmruby_core.a` out of all object files (C only) + * create `build/host/mrbc/bin/mrbc` via `mruby-bin-mrbc` gem +* compile all files under `src` and store result in `build/host/src` +* create `build/host/mrblib/mrblib.c` by compiling all `*.rb` files under `mrblib` with `build/host/mrbc/bin/mrbc` +* compile `build/host/mrblib/mrblib.c` to `build/host/mrblib/mrblib.o` +* create `build/host/lib/libmruby.a` out of all object files (C and Ruby) +* compile (normal) mrbgems specified in the configuration file +* create `build/host/lib/libmruby.a` from object files from gems and `libmruby_core.a` +* create binary commands according to binary gems (e.g. `mirb` and `mruby`) +* copy binaries under `build/host/bin` to `bin` directory ``` _____ _____ ______ ____ ____ _____ _____ ____ @@ -428,7 +422,7 @@ linking with *build/host/lib/libmruby.a* ### Cross-Compilation -In case of a cross-compilation to *i386* the *build* directory structure looks +In case of a cross-compilation to `i386` the `build` directory structure looks like this: +- build @@ -439,63 +433,41 @@ like this: | | | +- lib <- Native Libraries | | - | +- mrblib + | +- mrbgems | | | +- src - | | - | +- test <- Native mrbtest tool - | | - | +- tools - | | - | +- mirb - | | - | +- mrbc - | | - | +- mruby + | +- i386 | +- bin <- Cross-compiled Binaries | + +- include <- Header Directory + | +- lib <- Cross-compiled Libraries | + +- mrbgems + | +- mrblib | +- src - | - +- test <- Cross-compiled mrbtest tool - | - +- tools - | - +- mirb - | - +- mrbc - | - +- mruby An extra directory is created for the target platform. In case you -compile for *i386* a directory called *i386* is created under the +compile for `i386` a directory called `i386` is created under the build directory. The cross compilation workflow starts in the same way as the normal -compilation by compiling all *native* libraries and binaries. -Afterwards the cross compilation process proceeds like this: - -* cross-compile all files under *src* (object files will be stored -in *build/i386/src*) -* generate parser grammar out of *src/parse.y* (generated -result will be stored in *build/i386/src/y.tab.c*) -* cross-compile *build/i386/src/y.tab.c* to *build/i386/src/y.tab.o* -* create *build/i386/mrblib/mrblib.c* by compiling all \*.rb files -under *mrblib* with the native `build/host/bin/mrbc` -* cross-compile *build/host/mrblib/mrblib.c* to *build/host/mrblib/mrblib.o* -* create *build/i386/lib/libmruby.a* out of all object files (C and Ruby) -* create `build/i386/bin/mruby` by cross-compiling *mrbgems/mruby-bin-mruby/tools/mruby/mruby.c* and -linking with *build/i386/lib/libmruby.a* -* create `build/i386/bin/mirb` by cross-compiling *mrbgems/mruby-bin-mirb/tools/mirb/mirb.c* and -linking with *build/i386/lib/libmruby.a* -* create *build/i386/lib/libmruby_core.a* out of all object files (C only) -* create `build/i386/bin/mrbc` by cross-compiling *tools/mrbc/mrbc.c* and -linking with *build/i386/lib/libmruby_core.a* +compilation by compiling all *native* libraries and binaries, except +for we don't have `host/mrbc` directory (`host` directory itself works +as placeholder for `mrbc`). Afterwards the cross compilation process +proceeds like this: + +* cross-compile all files under `src` and store result in `build/i386/src` +* create `build/i386/lib/libmruby_core.a` out of C object files +* create `build/i386/mrblib/mrblib.c` by compiling all `*.rb` files under `mrblib` with native `build/host/bin/mrbc` +* cross-compile `build/i386/mrblib/mrblib.c` to `build/i386/mrblib/mrblib.o` +* create `build/i386/lib/libmruby.a` from object files from gems and `libmruby_core.a` +* create binary commands according to binary gems (e.g. `mirb` and `mruby`) +* copy binaries under `build/host/bin` to `bin` directory ``` _______________________________________________________________ @@ -526,24 +498,22 @@ feature due to the reason that there are functions (e.g. stdio) which can't be disabled for the main build. ```ruby -MRuby::CrossBuild.new('Minimal') do |conf| - toolchain :gcc - - conf.cc.defines = %w(MRB_NO_STDIO) - conf.bins = [] +MRuby::CrossBuild.new('minimal') do |conf| + conf.toolchain :gcc + conf.cc.defines << 'MRB_NO_STDIO' end ``` -This configuration defines a cross compile build called 'Minimal' which +This configuration defines a cross compile build called 'minimal' which is using the GCC and compiles for the host machine. It also disables -all usages of stdio and doesn't compile any binaries (e.g. mrbc). +all usages of stdio and doesn't compile any binaries (e.g. `mrbc`). ## Test Environment mruby's build process includes a test environment. In case you start the testing of mruby, a native binary called `mrbtest` will be generated and executed. -This binary contains all test cases which are defined under *test/t*. In case -of a cross-compilation an additional cross-compiled *mrbtest* binary is +This binary contains all test cases which are defined under `test/t`. In case +of a cross-compilation an additional cross-compiled `mrbtest` binary is generated. You can copy this binary and run on your target system. ## Embedding `mruby` in Your Application @@ -562,6 +532,7 @@ Usage: mruby-config [switches] --ldflags-before-libs print flags passed to linker before linked libraries --libs print linked libraries --libmruby-path print libmruby path + --help print this help ``` For example, when you have a C source file (`c.c`) and try to diff --git a/doc/guides/debugger.md b/doc/guides/debugger.md index bb3db7cd7..2393c20b1 100644 --- a/doc/guides/debugger.md +++ b/doc/guides/debugger.md @@ -114,7 +114,7 @@ b [class:]method The breakpoint will be ordered in serial from 1. The number, which was given to the deleted breakpoint, will never be given to another breakpoint again. -You can give multiple breakpoints to specified the line number and method. +You can give multiple breakpoints to the specified the line number and method. Be ware that breakpoint command will not check the validity of the class name and method name. You can get the current breakpoint information by the following options. @@ -165,7 +165,7 @@ Example: (foo.rb:1) delete ``` -This will delete all of the breakpoints. +This will delete all the breakpoints. ``` (foo.rb:1) delete 1 3 @@ -192,7 +192,7 @@ Example: (foo.rb:1) disable ``` -Use `disable` if you would like to disable all of the breakpoints. +Use `disable` if you would like to disable all the breakpoints. ``` (foo.rb:1) disable 1 3 @@ -324,7 +324,7 @@ expr: expression The expression is mandatory. The displayed expressions will be serially ordered from 1. -If an exception occurs, the exception information will be displayed and the debugging will be continued. +If an exception occurs, the exception information will be displayed, and the debugging will be continued. Example: diff --git a/doc/guides/gc-arena-howto.md b/doc/guides/gc-arena-howto.md index 7c367c98a..192a10802 100644 --- a/doc/guides/gc-arena-howto.md +++ b/doc/guides/gc-arena-howto.md @@ -11,13 +11,13 @@ execution speed. This is an error indicating overflow of "GC arena" implementing "conservative GC". GC (garbage collector) must ensure that object is "alive", in other -words, that it is referenced by somewhere from program. This can be +words, that it is referenced by somewhere from the program. This can be determined by checking if the object can be directly or indirectly referenced by root. The local variables, global variables and constants etc are root. If program execution is performed inside mruby VM, there is nothing to -worry about because GC can access all roots owned by VM. +worry about because GC can access all roots owned by the VM. The problem arises when executing C functions. The object referenced by C variable is also "alive", but mruby GC cannot aware of this, so @@ -38,7 +38,7 @@ The biggest problem is we have no way to access to the stack area in portable way. Therefore, we cannot use this method if we'd like to implement highly portable runtime, like mruby. -So we came up with an another plan to implement "conservative GC" in mruby. +So we came up with another plan to implement "conservative GC" in mruby. Again, the problem is when an object which was created in C function, becomes no longer referenced in the Ruby world, and cannot be treated as garbage. @@ -161,7 +161,7 @@ Please note that the final `inspect` representation of entire array was created before the call of `mrb_gc_arena_restore()`. Otherwise, required temporal object may be deleted by GC. -We may have a usecase where after creating many temporal objects, we'd +We may have an usecase where after creating many temporal objects, we'd like to keep some of them. In this case, we cannot use the same idea in `ary_inspect()` like appending objects to existing one. Instead, after `mrb_gc_arena_restore()`, we must re-register the objects we diff --git a/doc/guides/mrbconf.md b/doc/guides/mrbconf.md index 2130d51c2..2e76464d2 100644 --- a/doc/guides/mrbconf.md +++ b/doc/guides/mrbconf.md @@ -165,7 +165,7 @@ largest value of required alignment. * Please try if `MRB_USE_LINK_TIME_RO_DATA_P` is not available. * The `mrb_ro_data_p()` function is implemented by the user in an arbitrary file. * The prototype declaration is `mrb_bool mrb_ro_data_p(const char *ptr)`. -* Return `TRUE` if `ptr` is in read-only section, otherwise return `FALSE`. +* Return `TRUE` if `ptr` is in the read-only section, otherwise return `FALSE`. ## Other configuration. diff --git a/doc/guides/mrbgems.md b/doc/guides/mrbgems.md index 5ad00a5f2..00e097f4c 100644 --- a/doc/guides/mrbgems.md +++ b/doc/guides/mrbgems.md @@ -1,12 +1,13 @@ # mrbgems mrbgems is a library manager to integrate C and Ruby extension in an easy and -standardised way into mruby. +standardised way into mruby. Conventionally, each mrbgem name is prefixed by +`mruby-`, e.g. `mruby-time` for a gem that provides `Time` class functionality. ## Usage You have to activate mrbgems explicitly in your build configuration. To add -a GEM, add the following line to your build configuration file, for example: +a gem, add the following line to your build configuration file, for example: ```ruby conf.gem '/path/to/your/gem/dir' @@ -51,8 +52,8 @@ For specifying commit hash to checkout use `:checksum_hash` option: conf.gem mgem: 'mruby-redis', checksum_hash: '3446d19fc4a3f9697b5ddbf2a904f301c42f2f4e' ``` -If there is missing dependencies, mrbgem dependencies solver will reference -mrbgem from core or mgem-list. +If there are missing dependencies, mrbgem dependencies solver will reference +mrbgem from the core or mgem-list. To pull all gems from remote GIT repository on build, call ```rake -p```, or ```rake --pull-gems```. @@ -69,7 +70,7 @@ into mruby, in the same format as if you were adding them to the build config via `config.gem`, but wrapped in an `MRuby::GemBox` object. GemBoxes are loaded into mruby via `config.gembox 'boxname'`. -Below we have created a GemBox containing *mruby-time* and *mrbgems-example*: +Below we have created a GemBox containing `mruby-time` and `mrbgems-example`: ```ruby MRuby::GemBox.new do |conf| @@ -79,10 +80,10 @@ end ``` As mentioned, the GemBox uses the same conventions as `MRuby::Build`. The GemBox -must be saved with a *.gembox* extension inside the *mrbgems* directory to to be +must be saved with a `.gembox` extension inside the `mrbgems` directory to be picked up by mruby. -To use this example GemBox, we save it as `custom.gembox` inside the *mrbgems* +To use this example GemBox, we save it as `custom.gembox` inside the `mrbgems` directory in mruby, and add the following to your build configuration file inside the build block: @@ -90,8 +91,8 @@ the build block: conf.gembox 'custom' ``` -This will cause the *custom* GemBox to be read in during the build process, -adding *mruby-time* and *mrbgems-example* to the build. +This will cause the `custom` GemBox to be read in during the build process, +adding `mruby-time` and `mrbgems-example` to the build. If you want, you can put GemBox outside of mruby directory. In that case you must specify an absolute path like below. @@ -103,7 +104,7 @@ conf.gembox "#{ENV["HOME"]}/mygemboxes/custom" There are two GemBoxes that ship with mruby: [default](../../mrbgems/default.gembox) and [full-core](../../mrbgems/full-core.gembox). The [default](../../mrbgems/default.gembox) GemBox contains several core components of mruby, and [full-core](../../mrbgems/full-core.gembox) -contains every gem found in the *mrbgems* directory. +contains every gem found in the `mrbgems` directory. ## GEM Structure @@ -111,27 +112,29 @@ The maximal GEM structure looks like this: +- GEM_NAME <- Name of GEM | + +- README.md <- Readme for GEM + | + +- mrbgem.rake <- GEM Specification + | +- include/ <- Header for Ruby extension (will exported) | +- mrblib/ <- Source for Ruby extension | +- src/ <- Source for C extension | - +- test/ <- Test code (Ruby) - | - +- mrbgem.rake <- GEM Specification + +- tools/ <- Source for Executable (in C) | - +- README.md <- Readme for GEM + +- test/ <- Test code (Ruby) -The folder *mrblib* contains pure Ruby files to extend mruby. The folder *src* -contains C/C++ files to extend mruby. The folder *include* contains C/C++ header -files. The folder *test* contains C/C++ and pure Ruby files for testing purposes -which will be used by `mrbtest`. *mrbgem.rake* contains the specification -to compile C and Ruby files. *README.md* is a short description of your GEM. +The folder `mrblib` contains pure Ruby files to extend mruby. The folder `src` +contains C/C++ files to extend mruby. The folder `include` contains C/C++ header +files. The folder `test` contains C/C++ and pure Ruby files for testing purposes +which will be used by `mrbtest`. `mrbgem.rake` contains the specification +to compile C and Ruby files. `README.md` is a short description of your GEM. ## Build process -mrbgems expects a specification file called *mrbgem.rake* inside of your +mrbgems expects a specification file called `mrbgem.rake` inside of your GEM directory. A typical GEM specification could look like this for example: ```ruby @@ -143,10 +146,10 @@ end ``` The mrbgems build process will use this specification to compile Object and Ruby -files. The compilation results will be added to *lib/libmruby.a*. This file exposes +files. The compilation results will be added to `lib/libmruby.a`. This file exposes the GEM functionality to tools like `mruby` and `mirb`. -The following properties can be set inside of your `MRuby::Gem::Specification` for +The following properties can be set inside your `MRuby::Gem::Specification` for information purpose: * `spec.license` or `spec.licenses` (A single license or a list of them under which this GEM is licensed) @@ -227,7 +230,7 @@ end ``` In case your GEM has more complex build requirements you can use -the following options additionally inside of your GEM specification: +the following options additionally inside your GEM specification: * `spec.cc.flags` (C compiler flags) * `spec.cc.defines` (C compiler defines) @@ -242,7 +245,7 @@ the following options additionally inside of your GEM specification: * `spec.test_objs` (Object test files for integration into mrbtest) * `spec.test_preload` (Initialization files for mrbtest) -You also can use `spec.mruby.cc` and `spec.mruby.linker` to add extra global parameters for compiler and linker. +You also can use `spec.mruby.cc` and `spec.mruby.linker` to add extra global parameters for the compiler and linker. ### include_paths and dependency @@ -265,7 +268,7 @@ integrate C libraries into mruby. mrbgems expects that you have implemented a C method called `mrb_YOURGEMNAME_gem_init(mrb_state)`. `YOURGEMNAME` will be replaced -by the name of your GEM. If you call your GEM *c_extension_example*, your +by the name of your GEM. If you call your GEM `c_extension_example`, your initialisation method could look like this: ```C @@ -280,7 +283,7 @@ mrb_c_extension_example_gem_init(mrb_state* mrb) { mrbgems expects that you have implemented a C method called `mrb_YOURGEMNAME_gem_final(mrb_state)`. `YOURGEMNAME` will be replaced -by the name of your GEM. If you call your GEM *c_extension_example*, your +by the name of your GEM. If you call your GEM `c_extension_example`, your finalizer method could look like this: ```C @@ -294,6 +297,8 @@ mrb_c_extension_example_gem_final(mrb_state* mrb) { +- c_extension_example/ | + +- README.md (Optional) + | +- src/ | | | +- example.c <- C extension source @@ -303,13 +308,11 @@ mrb_c_extension_example_gem_final(mrb_state* mrb) { | +- example.rb <- Test code for C extension | +- mrbgem.rake <- GEM specification - | - +- README.md ## Ruby Extension mruby can be extended with pure Ruby. It is possible to override existing -classes or add new ones in this way. Put all Ruby files into the *mrblib* +classes or add new ones in this way. Put all Ruby files into the `mrblib` folder. ### Pre-Conditions @@ -320,25 +323,25 @@ none +- ruby_extension_example/ | + +- README.md (Optional) + | +- mrblib/ | | - | +- example.rb <- Ruby extension source + | +- example.rb <- Ruby extension source | +- test/ | | - | +- example.rb <- Test code for Ruby extension + | +- example.rb <- Test code for Ruby extension | - +- mrbgem.rake <- GEM specification - | - +- README.md + +- mrbgem.rake <- GEM specification ## C and Ruby Extension mruby can be extended with C and Ruby at the same time. It is possible to override existing classes or add new ones in this way. Put all Ruby files -into the *mrblib* folder and all C files into the *src* folder. +into the `mrblib` folder and all C files into the `src` folder. -mruby codes under *mrblib* directory would be executed after gem init C +mruby codes under `mrblib` directory would be executed after gem init C function is called. Make sure *mruby script* depends on *C code* and *C code* doesn't depend on *mruby script*. @@ -350,18 +353,55 @@ See C and Ruby example. +- c_and_ruby_extension_example/ | + +- README.md (Optional) + | +- mrblib/ | | - | +- example.rb <- Ruby extension source + | +- example.rb <- Ruby extension source | +- src/ | | - | +- example.c <- C extension source + | +- example.c <- C extension source | +- test/ | | - | +- example.rb <- Test code for C and Ruby extension + | +- example.rb <- Test code for C and Ruby extension | - +- mrbgem.rake <- GEM specification + +- mrbgem.rake <- GEM specification + +## Binary gems + +Some gems can generate executables under `bin` directory. Those gems are called +binary gems. Names of binary gems are conventionally prefixed by `mruby-bin`, +e.g. `mruby-bin-mirb` and `mruby-bin-strip`. + +To specify the name of executable, you need to specify `spec.bins` in the +`mrbgem.rake`. The entry point `main()` should be in the C source file under +`tools/<bin>/*.c` where `<bin>` is a name of the executable. C files under the +`<bin>` directory are compiled and linked to the executable, but not included in +`libmruby.a`, whereas files under `mrblib` and `src` are. + +It is strongly recommended not to include `mrblib` and `src` directories in the +binary gems, to separate normal gems and binary gems. + +### Example + + +- mruby-bin-example/ + | + +- README.md (Optional) + | + +- bintest/ + | | + | +- example.rb <- Test code for binary gem + | + +- mrbgem.rake <- Gem specification + | + +- mrblib/ <- Source for Ruby extension (Optional) + | + +- src/ <- Source for C extension (Optional) | - +- README.md + +- tools/ + | + +- example/ <- Executable name directory + | + +- example.c <- Source for Executable (includes main) diff --git a/doc/limitations.md b/doc/limitations.md index ee3107297..d903d528c 100644 --- a/doc/limitations.md +++ b/doc/limitations.md @@ -54,7 +54,7 @@ end #### mruby [3.0.0 (2021-03-05)] -No exception is raised. Instead you have to do: +No exception is raised. Instead, you have to do: ```ruby begin @@ -66,7 +66,7 @@ end ## Fiber execution can't cross C function boundary -mruby's `Fiber` is implemented in a similar way to Lua's co-routine. This +mruby's `Fiber` is implemented similarly to Lua's co-routine. This results in the consequence that you can't switch context within C functions. Only exception is `mrb_fiber_yield` at return. @@ -95,7 +95,7 @@ p Liste.new "foobar" ## Method visibility For simplicity reasons no method visibility (public/private/protected) is -supported. Those methods are defined but they are dummy methods. +supported. Those methods are defined, but they are dummy methods. ```ruby class VisibleTest diff --git a/doc/mruby3.md b/doc/mruby3.md index ebd2673d5..aacbbb371 100644 --- a/doc/mruby3.md +++ b/doc/mruby3.md @@ -76,8 +76,8 @@ to be default `mrb_value` representation. Now the default is ## `MRB_WORD_BOXING` Pack `mrb_value` in an `intptr_t` integer. Consumes less -memory compared to `MRB_NO_BOXING` especially on 32 bit -platforms. `Fixnum` size is 31 bits so some integer values +memory compared to `MRB_NO_BOXING` especially on 32-bit +platforms. `Fixnum` size is 31 bits, so some integer values does not fit in `Fixnum` integers. ## `MRB_NAN_BOXING` @@ -117,7 +117,7 @@ Instructions that access pool[i]/syms[i] where i>255. * `OP_STRING16` * `OP_LOADSYM16` -Instructions that load a 32 bit integer. +Instructions that load a 32-bit integer. * `OP_LOADI32` @@ -160,4 +160,4 @@ For better and faster random number generation. Preallocated symbols are interned at compile-time. They can be accessed via symbols macros (e.g. `MRB_SYM()`). -See [Symbols](https://github.com/mruby/mruby/blob/master/doc/guides/symbol.md). +See [Symbols](./guides/symbol.md). diff --git a/doc/opcode.md b/doc/opcode.md index 513b28302..3ad09919c 100644 --- a/doc/opcode.md +++ b/doc/opcode.md @@ -1,12 +1,12 @@ # The new bytecode -We will reimplement VM to use 8bit instruction code. By +We will reimplement the VM to use 8bit instruction code. By bytecode, we mean real byte code. The whole purpose is reducing the memory consumption of mruby VM. # Instructions -Instructions are bytes. There can be 256 instructions. Currently we +Instructions are bytes. There can be 256 instructions. Currently, we have 94 instructions. Instructions can take 0 to 3 operands. ## operands @@ -27,6 +27,7 @@ sign) of operands. | OP_NOP | - | no operation | | OP_MOVE | BB | R(a) = R(b) | | OP_LOADL | BB | R(a) = Pool(b) | +| OP_LOADL16 | BS | R(a) = Pool(b) | | OP_LOADI | BB | R(a) = mrb_int(b) | | OP_LOADINEG | BB | R(a) = mrb_int(-b) | | OP_LOADI__1 | B | R(a) = mrb_int(-1) | @@ -38,8 +39,10 @@ sign) of operands. | OP_LOADI_5 | B | R(a) = mrb_int(5) | | OP_LOADI_6 | B | R(a) = mrb_int(6) | | OP_LOADI_7 | B | R(a) = mrb_int(7) | -| OP_LOADI16 | BsS | R(a) = mrb_int(b) | +| OP_LOADI16 | BS | R(a) = mrb_int(b) | +| OP_LOADI32 | BSS | R(a) = mrb_int((b<<16)+c) | | OP_LOADSYM | BB | R(a) = Syms(b) | +| OP_LOADSYM16 | BS | R(a) = Syms(b) | | OP_LOADNIL | B | R(a) = nil | | OP_LOADSELF | B | R(a) = self | | OP_LOADT | B | R(a) = true | @@ -58,10 +61,10 @@ sign) of operands. | OP_SETMCNST | BB | R(a+1)::Syms(b) = R(a) | | OP_GETUPVAR | BBB | R(a) = uvget(b,c) | | OP_SETUPVAR | BBB | uvset(b,c,R(a)) | -| OP_JMP | S | pc=a | -| OP_JMPIF | BS | if R(a) pc=b | -| OP_JMPNOT | BS | if !R(a) pc=b | -| OP_JMPNIL | BS | if R(a)==nil pc=b | +| OP_JMP | S | pc+=a | +| OP_JMPIF | BS | if R(a) pc+=b | +| OP_JMPNOT | BS | if !R(a) pc+=b | +| OP_JMPNIL | BS | if R(a)==nil pc+=b | | OP_JMPUW | S | unwind_and_jump_to(a) | | OP_EXCEPT | B | R(a) = exc | | OP_RESCUE | BB | R(b) = R(a).isa?(R(b)) | @@ -70,6 +73,7 @@ sign) of operands. | OP_SENDVB | BB | R(a) = call(R(a),Syms(b),*R(a+1),&R(a+2)) | | OP_SEND | BBB | R(a) = call(R(a),Syms(b),R(a+1),...,R(a+c)) | | OP_SENDB | BBB | R(a) = call(R(a),Syms(b),R(a+1),...,R(a+c),&R(a+c+1)) | +| OP_SENDVK | BB | R(a) = call(R(a),Syms(b),*R(a+1),**(a+2),&R(a+3)) | | OP_CALL | - | R(0) = self.call(frame.argc, frame.argv) | | OP_SUPER | BB | R(a) = super(R(a+1),... ,R(a+b+1)) | | OP_ARGARY | BS | R(a) = argument array (16=5:1:5:1:4) | @@ -102,19 +106,24 @@ sign) of operands. | OP_APOST | BBB | *R(a),R(a+1)..R(a+c) = R(a)[b..] | | OP_INTERN | B | R(a) = intern(R(a)) | | OP_STRING | BB | R(a) = str_dup(Lit(b)) | +| OP_STRING16 | BS | R(a) = str_dup(Lit(b)) | | OP_STRCAT | B | str_cat(R(a),R(a+1)) | -| OP_HASH | BB | R(a) = hash_new(R(a),R(a+1)..R(a+b)) | -| OP_HASHADD | BB | R(a) = hash_push(R(a),R(a+1)..R(a+b)) | +| OP_HASH | BB | R(a) = hash_new(R(a),R(a+1)..R(a+b*2-1)) | +| OP_HASHADD | BB | R(a) = hash_push(R(a),R(a+1)..R(a+b*2)) | | OP_HASHCAT | B | R(a) = hash_cat(R(a),R(a+1)) | | OP_LAMBDA | BB | R(a) = lambda(SEQ[b],OP_L_LAMBDA) | +| OP_LAMBDA16 | BS | R(a) = lambda(SEQ[b],OP_L_LAMBDA) | | OP_BLOCK | BB | R(a) = lambda(SEQ[b],OP_L_BLOCK) | +| OP_BLOCK16 | BS | R(a) = lambda(SEQ[b],OP_L_BLOCK) | | OP_METHOD | BB | R(a) = lambda(SEQ[b],OP_L_METHOD) | +| OP_METHOD16 | BS | R(a) = lambda(SEQ[b],OP_L_METHOD) | | OP_RANGE_INC | B | R(a) = range_new(R(a),R(a+1),FALSE) | | OP_RANGE_EXC | B | R(a) = range_new(R(a),R(a+1),TRUE) | | OP_OCLASS | B | R(a) = ::Object | | OP_CLASS | BB | R(a) = newclass(R(a),Syms(b),R(a+1)) | | OP_MODULE | BB | R(a) = newmodule(R(a),Syms(b)) | | OP_EXEC | BB | R(a) = blockexec(R(a),SEQ[b]) | +| OP_EXEC16 | BS | R(a) = blockexec(R(a),SEQ[b]) | | OP_DEF | BB | R(a).newmethod(Syms(b),R(a+1)) | | OP_ALIAS | BB | alias_method(target_class,Syms(a),Syms(b)) | | OP_UNDEF | B | undef_method(target_class,Syms(a)) | diff --git a/include/mruby/array.h b/include/mruby/array.h index da811606a..16f78f773 100644 --- a/include/mruby/array.h +++ b/include/mruby/array.h @@ -21,7 +21,7 @@ typedef struct mrb_shared_array { mrb_value *ptr; } mrb_shared_array; -#if defined(MRB_32BIT) && defined(MRB_NO_BOXING) +#if defined(MRB_32BIT) && defined(MRB_NO_BOXING) && !defined(MRB_USE_FLOAT32) # define MRB_ARY_NO_EMBED # define MRB_ARY_EMBED_LEN_MAX 0 #else @@ -65,7 +65,7 @@ struct RArray { #define ARY_EMBED_PTR(a) ((a)->as.ary) #endif -#define ARY_LEN(a) (ARY_EMBED_P(a)?ARY_EMBED_LEN(a):(a)->as.heap.len) +#define ARY_LEN(a) (ARY_EMBED_P(a)?ARY_EMBED_LEN(a):(mrb_int)(a)->as.heap.len) #define ARY_PTR(a) (ARY_EMBED_P(a)?ARY_EMBED_PTR(a):(a)->as.heap.ptr) #define RARRAY_LEN(a) ARY_LEN(RARRAY(a)) #define RARRAY_PTR(a) ARY_PTR(RARRAY(a)) @@ -107,7 +107,7 @@ MRB_API mrb_value mrb_ary_new(mrb_state *mrb); * Array[value1, value2, ...] * * @param mrb The mruby state reference. - * @param size The numer of values. + * @param size The number of values. * @param vals The actual values. * @return The initialized array. */ diff --git a/include/mruby/boxing_word.h b/include/mruby/boxing_word.h index 86a04368f..beab8681e 100644 --- a/include/mruby/boxing_word.h +++ b/include/mruby/boxing_word.h @@ -84,9 +84,9 @@ union mrb_value_ { struct { MRB_ENDIAN_LOHI( mrb_sym sym; - ,uint32_t sym_flag; + ,uint32_t flag; ) - }; + } sym; #endif struct RBasic *bp; #ifndef MRB_NO_FLOAT @@ -129,7 +129,7 @@ mrb_integer_func(mrb_value o) { } #define mrb_integer(o) mrb_integer_func(o) #ifdef MRB_64BIT -#define mrb_symbol(o) mrb_val_union(o).sym +#define mrb_symbol(o) mrb_val_union(o).sym.sym #else #define mrb_symbol(o) (mrb_sym)(((o).w) >> BOXWORD_SYMBOL_SHIFT) #endif @@ -138,7 +138,7 @@ mrb_integer_func(mrb_value o) { #define mrb_fixnum_p(o) BOXWORD_SHIFT_VALUE_P(o, FIXNUM) #define mrb_integer_p(o) (BOXWORD_SHIFT_VALUE_P(o, FIXNUM)||BOXWORD_OBJ_TYPE_P(o, INTEGER)) #ifdef MRB_64BIT -#define mrb_symbol_p(o) (mrb_val_union(o).sym_flag == BOXWORD_SYMBOL_FLAG) +#define mrb_symbol_p(o) (mrb_val_union(o).sym.flag == BOXWORD_SYMBOL_FLAG) #else #define mrb_symbol_p(o) BOXWORD_SHIFT_VALUE_P(o, SYMBOL) #endif @@ -182,8 +182,8 @@ mrb_integer_func(mrb_value o) { #ifdef MRB_64BIT #define SET_SYM_VALUE(r,v) do {\ union mrb_value_ mrb_value_union_variable;\ - mrb_value_union_variable.sym = v;\ - mrb_value_union_variable.sym_flag = BOXWORD_SYMBOL_FLAG;\ + mrb_value_union_variable.sym.sym = v;\ + mrb_value_union_variable.sym.flag = BOXWORD_SYMBOL_FLAG;\ (r) = mrb_value_union_variable.value;\ } while (0) #else diff --git a/include/mruby/dump.h b/include/mruby/dump.h index ed0c64b1a..3c48866d9 100644 --- a/include/mruby/dump.h +++ b/include/mruby/dump.h @@ -16,7 +16,10 @@ */ MRB_BEGIN_DECL -#define DUMP_DEBUG_INFO 1 +/* flags for mrb_dump_irep{,_binary,_cfunc,_cstruct} */ +#define MRB_DUMP_DEBUG_INFO 1 +#define MRB_DUMP_STATIC 2 +#define DUMP_DEBUG_INFO MRB_DUMP_DEBUG_INFO /* deprecated */ int mrb_dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin, size_t *bin_size); #ifndef MRB_NO_STDIO diff --git a/include/mruby/hash.h b/include/mruby/hash.h index a16df2f75..749ea3869 100644 --- a/include/mruby/hash.h +++ b/include/mruby/hash.h @@ -29,7 +29,7 @@ struct RHash { union { struct hash_entry *ea; struct hash_table *ht; - }; + } hsh; }; #define mrb_hash_ptr(v) ((struct RHash*)(mrb_ptr(v))) diff --git a/include/mruby/irep.h b/include/mruby/irep.h index 8d1648e13..640b0177f 100644 --- a/include/mruby/irep.h +++ b/include/mruby/irep.h @@ -31,9 +31,7 @@ typedef struct mrb_pool_value { union { const char *str; int32_t i32; -#if defined(MRB_64BIT) || defined(MRB_INT64) int64_t i64; -#endif #ifndef MRB_NO_FLOAT mrb_float f; #endif diff --git a/include/mruby/value.h b/include/mruby/value.h index 293ef90a7..4831b55af 100644 --- a/include/mruby/value.h +++ b/include/mruby/value.h @@ -107,12 +107,12 @@ static const unsigned int IEEE754_INFINITY_BITS_SINGLE = 0x7F800000; enum mrb_vtype { MRB_TT_FALSE = 0, MRB_TT_TRUE, - MRB_TT_FLOAT, - MRB_TT_INTEGER, MRB_TT_SYMBOL, MRB_TT_UNDEF, - MRB_TT_CPTR, MRB_TT_FREE, + MRB_TT_FLOAT, + MRB_TT_INTEGER, + MRB_TT_CPTR, MRB_TT_OBJECT, MRB_TT_CLASS, MRB_TT_MODULE, @@ -177,7 +177,7 @@ struct RCptr { #endif #ifndef mrb_immediate_p -#define mrb_immediate_p(o) (mrb_type(o) < MRB_TT_FREE) +#define mrb_immediate_p(o) (mrb_type(o) <= MRB_TT_CPTR) #endif #ifndef mrb_integer_p #define mrb_integer_p(o) (mrb_type(o) == MRB_TT_INTEGER) diff --git a/lib/mruby/build.rb b/lib/mruby/build.rb index d6eabd79e..b9f26d49f 100644 --- a/lib/mruby/build.rb +++ b/lib/mruby/build.rb @@ -248,7 +248,7 @@ module MRuby end end else - cxx_src = "#{build_dir}/#{src.relative_path})".ext << "-cxx.cxx" + cxx_src = "#{build_dir}/#{src.relative_path.to_s.remove_leading_parents}".ext << "-cxx.cxx" obj = cxx_src.ext(@exts.object) end @@ -320,12 +320,16 @@ EOS return @mrbcfile if @mrbcfile gem_name = "mruby-bin-mrbc" - gem = @gems[gem_name] - gem ||= (host = MRuby.targets["host"]) && host.gems[gem_name] - unless gem - fail "external mrbc or mruby-bin-mrbc gem in current('#{@name}') or 'host' build is required" + if (gem = @gems[gem_name]) + @mrbcfile = exefile("#{gem.build.build_dir}/bin/mrbc") + elsif !host? && (host = MRuby.targets["host"]) + if (gem = host.gems[gem_name]) + @mrbcfile = exefile("#{gem.build.build_dir}/bin/mrbc") + elsif host.mrbcfile_external? + @mrbcfile = host.mrbcfile + end end - @mrbcfile = exefile("#{gem.build.build_dir}/bin/mrbc") + @mrbcfile || fail("external mrbc or mruby-bin-mrbc gem in current('#{@name}') or 'host' build is required") end def mrbcfile=(path) diff --git a/lib/mruby/build/command.rb b/lib/mruby/build/command.rb index 4e9f7297f..dbe3763d9 100644 --- a/lib/mruby/build/command.rb +++ b/lib/mruby/build/command.rb @@ -104,9 +104,9 @@ module MRuby rakedep = File.exist?(gemrake) ? [ gemrake ] : [] if build_dir.include? "mrbgems/" - generated_file_matcher = Regexp.new("^#{Regexp.escape build_dir}/(.*)#{Regexp.escape out_ext}$") + generated_file_matcher = Regexp.new("^#{Regexp.escape build_dir}/(?!mrbc/)(.*)#{Regexp.escape out_ext}$") else - generated_file_matcher = Regexp.new("^#{Regexp.escape build_dir}/(?!mrbgems/.+/)(.*)#{Regexp.escape out_ext}$") + generated_file_matcher = Regexp.new("^#{Regexp.escape build_dir}/(?!mrbc/|mrbgems/.+/)(.*)#{Regexp.escape out_ext}$") end source_exts.each do |ext, compile| rule generated_file_matcher => [ @@ -328,13 +328,16 @@ module MRuby @compile_options = "-B%{funcname} -o-" end - def run(out, infiles, funcname, cdump = true) + def run(out, infiles, funcname, cdump: true, static: false) @command ||= @build.mrbcfile infiles = [infiles].flatten infiles.each_with_index do |f, i| _pp i == 0 ? "MRBC" : "", f.relative_path, indent: 2 end - cmd = %Q["#{filename @command}" #{cdump ? "-S" : ""} #{@compile_options % {:funcname => funcname}} #{filename(infiles).map{|f| %Q["#{f}"]}.join(' ')}] + opt = @compile_options % {funcname: funcname} + opt << " -S" if cdump + opt << " -s" if static + cmd = %["#{filename @command}" #{opt} #{filename(infiles).map{|f| %["#{f}"]}.join(' ')}] puts cmd if Rake.verbose IO.popen(cmd, 'r+') do |io| out.puts io.read diff --git a/lib/mruby/core_ext.rb b/lib/mruby/core_ext.rb index 33454edad..1ad528c26 100644 --- a/lib/mruby/core_ext.rb +++ b/lib/mruby/core_ext.rb @@ -18,6 +18,10 @@ class String def relative_path relative_path_from(Dir.pwd) end + + def remove_leading_parents + Pathname.new(".#{Pathname.new("/#{self}").cleanpath}").cleanpath.to_s + end end def install_D(src, dst) diff --git a/lib/mruby/gem.rb b/lib/mruby/gem.rb index 48a14fc54..716f21286 100644 --- a/lib/mruby/gem.rb +++ b/lib/mruby/gem.rb @@ -119,6 +119,10 @@ module MRuby @dir.start_with?("#{MRUBY_ROOT}/mrbgems/") end + def bin? + @bins.size > 0 + end + def add_dependency(name, *requirements) default_gem = requirements.last.kind_of?(Hash) ? requirements.pop : nil requirements = ['>= 0.0.0'] if requirements.empty? @@ -194,10 +198,11 @@ module MRuby open(fname, 'w') do |f| print_gem_init_header f unless rbfiles.empty? + opts = {cdump: cdump?, static: true} if cdump? - build.mrbc.run f, rbfiles, "gem_mrblib_#{funcname}_proc" + build.mrbc.run f, rbfiles, "gem_mrblib_#{funcname}_proc", **opts else - build.mrbc.run f, rbfiles, "gem_mrblib_irep_#{funcname}", false + build.mrbc.run f, rbfiles, "gem_mrblib_irep_#{funcname}", **opts end end f.puts %Q[void mrb_#{funcname}_gem_init(mrb_state *mrb);] @@ -496,8 +501,10 @@ module MRuby end end - def linker_attrs - map{|g| g.linker.run_attrs}.transpose + def linker_attrs(gem=nil) + gems = self.reject{|g| g.bin?} # library gems + gems << gem unless gem.nil? + gems.map{|g| g.linker.run_attrs}.transpose end end # List end # Gem diff --git a/mrbgems/mruby-array-ext/mrblib/array.rb b/mrbgems/mruby-array-ext/mrblib/array.rb index 25669a9ab..0195a6970 100644 --- a/mrbgems/mruby-array-ext/mrblib/array.rb +++ b/mrbgems/mruby-array-ext/mrblib/array.rb @@ -325,7 +325,7 @@ class Array # def fetch(n, ifnone=NONE, &block) - warn "block supersedes default value argument" if !n.nil? && ifnone != NONE && block + #warn "block supersedes default value argument" if !n.nil? && ifnone != NONE && block idx = n if idx < 0 diff --git a/mrbgems/mruby-bin-debugger/bintest/print.rb b/mrbgems/mruby-bin-debugger/bintest/print.rb index 4a4339f5a..63ebded3e 100644 --- a/mrbgems/mruby-bin-debugger/bintest/print.rb +++ b/mrbgems/mruby-bin-debugger/bintest/print.rb @@ -264,7 +264,7 @@ SRC BinTest_MrubyBinDebugger.test(src, tc) end -assert('mruby-bin-debugger(print) same name:instance variabe') do +assert('mruby-bin-debugger(print) same name:instance variable') do # ruby source (bp is break point) src = <<"SRC" @iv = 'top' @@ -296,7 +296,7 @@ SRC BinTest_MrubyBinDebugger.test(src, tc) end -# Kernel#instance_eval(string) does't work const. +# Kernel#instance_eval(string) doesn't work const. =begin assert('mruby-bin-debugger(print) same name:const') do # ruby source (bp is break point) diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c index db28e4229..a05ff9415 100644 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c @@ -502,7 +502,7 @@ dbgcmd_quit(mrb_state *mrb, mrdb_state *mrdb) if (mrdb->dbg->xm == DBG_QUIT) { struct RClass *exc; exc = mrb_define_class(mrb, "DebuggerExit", mrb->eException_class); - mrb_raise(mrb, exc, "Exit mrdb."); + mrb_raise(mrb, exc, "Exit mrdb"); } return DBGST_PROMPT; } diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c index 233c86cef..fe8cf0aa7 100644 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdrun.c @@ -18,9 +18,9 @@ dbgcmd_run(mrb_state *mrb, mrdb_state *mrdb) dbg->xm = DBG_QUIT; if (dbg->xphase == DBG_PHASE_RUNNING){ struct RClass *exc; - puts("Start it from the beginning."); + puts("Start it from the beginning"); exc = mrb_define_class(mrb, "DebuggerRestart", mrb->eException_class); - mrb_raise(mrb, exc, "Restart mrdb."); + mrb_raise(mrb, exc, "Restart mrdb"); } } diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdberror.h b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdberror.h index c7812b0d6..6f1a53f3d 100644 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdberror.h +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdberror.h @@ -17,4 +17,3 @@ #define MRB_DEBUG_BREAK_NO_OVER (-15) #endif - diff --git a/mrbgems/mruby-bin-mirb/mrbgem.rake b/mrbgems/mruby-bin-mirb/mrbgem.rake index fa0947cfa..c31ac7ae9 100644 --- a/mrbgems/mruby-bin-mirb/mrbgem.rake +++ b/mrbgems/mruby-bin-mirb/mrbgem.rake @@ -5,6 +5,8 @@ MRuby::Gem::Specification.new('mruby-bin-mirb') do |spec| if spec.build.cc.search_header_path 'readline/readline.h' spec.cc.defines << "MRB_USE_READLINE" + spec.cc.defines << "MRB_READLINE_HEADER='<readline/readline.h>'" + spec.cc.defines << "MRB_READLINE_HISTORY='<readline/history.h>'" if spec.build.cc.search_header_path 'termcap.h' if MRUBY_BUILD_HOST_IS_CYGWIN || MRUBY_BUILD_HOST_IS_OPENBSD if spec.build.cc.search_header_path 'termcap.h' @@ -33,6 +35,11 @@ MRuby::Gem::Specification.new('mruby-bin-mirb') do |spec| spec.linker.libraries << 'ncurses' end end + elsif spec.build.cc.search_header_path 'edit/readline/readline.h' + spec.cc.defines << "MRB_USE_READLINE" + spec.cc.defines << "MRB_READLINE_HEADER='<edit/readline/readline.h>'" + spec.cc.defines << "MRB_READLINE_HISTORY='<edit/readline/history.h>'" + spec.linker.libraries << "edit" elsif spec.build.cc.search_header_path 'linenoise.h' spec.cc.defines << "MRB_USE_LINENOISE" end diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c index 243666acd..a4780a415 100644 --- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c @@ -39,8 +39,8 @@ #endif #ifdef MRB_USE_READLINE -#include <readline/readline.h> -#include <readline/history.h> +#include MRB_READLINE_HEADER +#include MRB_READLINE_HISTORY #define MIRB_ADD_HISTORY(line) add_history(line) #define MIRB_READLINE(ch) readline(ch) #if !defined(RL_READLINE_VERSION) || RL_READLINE_VERSION < 0x600 @@ -63,7 +63,7 @@ #define MIRB_USING_HISTORY() #endif -#ifndef _WIN32 +#if !defined(_WIN32) && defined(_POSIX_C_SOURCE) #define MIRB_SIGSETJMP(env) sigsetjmp(env, 1) #define MIRB_SIGLONGJMP(env, val) siglongjmp(env, val) #define SIGJMP_BUF sigjmp_buf diff --git a/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c b/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c index 31a4e6fa1..e17f32a2e 100644 --- a/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +++ b/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c @@ -14,17 +14,17 @@ #define C_EXT ".c" struct mrbc_args { - int argc; - char **argv; - int idx; const char *prog; const char *outfile; const char *initname; + char **argv; + int argc; + int idx; mrb_bool dump_struct : 1; mrb_bool check_syntax : 1; mrb_bool verbose : 1; mrb_bool remove_lv : 1; - unsigned int flags : 4; + uint8_t flags : 4; }; static void @@ -38,6 +38,7 @@ usage(const char *name) "-g produce debugging information", "-B<symbol> binary <symbol> output in C language format", "-S dump C struct (requires -B)", + "-s define <symbol> as static variable", "--remove-lv remove local variables", "--verbose run at verbose mode", "--version print the version", @@ -131,7 +132,10 @@ parse_args(mrb_state *mrb, int argc, char **argv, struct mrbc_args *args) args->verbose = TRUE; break; case 'g': - args->flags |= DUMP_DEBUG_INFO; + args->flags |= MRB_DUMP_DEBUG_INFO; + break; + case 's': + args->flags |= MRB_DUMP_STATIC; break; case 'E': case 'e': diff --git a/mrbgems/mruby-binding-core/mrbgem.rake b/mrbgems/mruby-binding-core/mrbgem.rake new file mode 100644 index 000000000..c0ba48207 --- /dev/null +++ b/mrbgems/mruby-binding-core/mrbgem.rake @@ -0,0 +1,7 @@ +MRuby::Gem::Specification.new('mruby-binding-core') do |spec| + spec.license = 'MIT' + spec.author = 'mruby developers' + spec.summary = 'Binding class (core features only)' + + spec.add_test_dependency('mruby-proc-ext', :core => 'mruby-proc-ext') +end diff --git a/mrbgems/mruby-binding-core/src/binding-core.c b/mrbgems/mruby-binding-core/src/binding-core.c new file mode 100644 index 000000000..209da8bf9 --- /dev/null +++ b/mrbgems/mruby-binding-core/src/binding-core.c @@ -0,0 +1,309 @@ +#include <mruby.h> +#include <mruby/array.h> +#include <mruby/hash.h> +#include <mruby/proc.h> +#include <mruby/variable.h> +#include <mruby/presym.h> +#include <mruby/opcode.h> +#include <mruby/debug.h> + +void mrb_proc_merge_lvar(mrb_state *mrb, mrb_irep *irep, struct REnv *env, int num, const mrb_sym *lv, const mrb_value *stack); +mrb_value mrb_proc_local_variables(mrb_state *mrb, const struct RProc *proc); +const struct RProc *mrb_proc_get_caller(mrb_state *mrb, struct REnv **env); + +static mrb_int +binding_extract_pc(mrb_state *mrb, mrb_value binding) +{ + mrb_value obj = mrb_iv_get(mrb, binding, MRB_SYM(pc)); + if (mrb_nil_p(obj)) { + return -1; + } + else { + mrb_check_type(mrb, obj, MRB_TT_INTEGER); + return mrb_int(mrb, obj); + } +} + +static const struct RProc * +binding_extract_proc(mrb_state *mrb, mrb_value binding) +{ + mrb_value obj = mrb_iv_get(mrb, binding, MRB_SYM(proc)); + mrb_check_type(mrb, obj, MRB_TT_PROC); + return mrb_proc_ptr(obj); +} + +static struct REnv * +binding_extract_env(mrb_state *mrb, mrb_value binding) +{ + mrb_value obj = mrb_iv_get(mrb, binding, MRB_SYM(env)); + if (mrb_nil_p(obj)) { + return NULL; + } + else { + mrb_check_type(mrb, obj, MRB_TT_ENV); + return (struct REnv *)mrb_obj_ptr(obj); + } +} + +static void +binding_local_variable_name_check(mrb_state *mrb, mrb_sym id) +{ + if (id == 0) { + badname: + mrb_raisef(mrb, E_NAME_ERROR, "wrong local variable name %!n for binding", id); + } + + mrb_int len; + const char *name = mrb_sym_name_len(mrb, id, &len); + if (len == 0) { + goto badname; + } + + if (ISASCII(*name) && !(*name == '_' || ISLOWER(*name))) { + goto badname; + } + len--; + name++; + + for (; len > 0; len--, name++) { + if (ISASCII(*name) && !(*name == '_' || ISALNUM(*name))) { + goto badname; + } + } +} + +static mrb_value * +binding_local_variable_search(mrb_state *mrb, const struct RProc *proc, struct REnv *env, mrb_sym varname) +{ + binding_local_variable_name_check(mrb, varname); + + while (proc) { + if (MRB_PROC_CFUNC_P(proc)) break; + + const mrb_irep *irep = proc->body.irep; + const mrb_sym *lv; + if (irep && (lv = irep->lv)) { + for (int i = 0; i + 1 < irep->nlocals; i++, lv++) { + if (varname == *lv) { + return (env && MRB_ENV_LEN(env) > i) ? &env->stack[i + 1] : NULL; + } + } + } + + if (MRB_PROC_SCOPE_P(proc)) break; + env = MRB_PROC_ENV(proc); + proc = proc->upper; + } + + return NULL; +} + +/* + * call-seq: + * local_variable_defined?(symbol) -> bool + */ +static mrb_value +binding_local_variable_defined_p(mrb_state *mrb, mrb_value self) +{ + mrb_sym varname; + mrb_get_args(mrb, "n", &varname); + + const struct RProc *proc = binding_extract_proc(mrb, self); + struct REnv *env = binding_extract_env(mrb, self); + mrb_value *e = binding_local_variable_search(mrb, proc, env, varname); + if (e) { + return mrb_true_value(); + } + else { + return mrb_false_value(); + } +} + +/* + * call-seq: + * local_variable_get(symbol) -> object + */ +static mrb_value +binding_local_variable_get(mrb_state *mrb, mrb_value self) +{ + mrb_sym varname; + mrb_get_args(mrb, "n", &varname); + + const struct RProc *proc = binding_extract_proc(mrb, self); + struct REnv *env = binding_extract_env(mrb, self); + mrb_value *e = binding_local_variable_search(mrb, proc, env, varname); + if (!e) { + mrb_raisef(mrb, E_NAME_ERROR, "local variable %!n is not defined", varname); + } + + return *e; +} + +static mrb_value +binding_local_variable_set(mrb_state *mrb, mrb_value self) +{ + mrb_sym varname; + mrb_value obj; + mrb_get_args(mrb, "no", &varname, &obj); + + const struct RProc *proc = binding_extract_proc(mrb, self); + struct REnv *env = binding_extract_env(mrb, self); + mrb_value *e = binding_local_variable_search(mrb, proc, env, varname); + if (e) { + *e = obj; + } + else { + mrb_proc_merge_lvar(mrb, (mrb_irep*)proc->body.irep, env, 1, &varname, &obj); + } + + return obj; +} + +static mrb_value +binding_local_variables(mrb_state *mrb, mrb_value self) +{ + const struct RProc *proc = mrb_proc_ptr(mrb_iv_get(mrb, self, MRB_SYM(proc))); + return mrb_proc_local_variables(mrb, proc); +} + +static mrb_value +binding_receiver(mrb_state *mrb, mrb_value self) +{ + return mrb_iv_get(mrb, self, MRB_SYM(recv)); +} + +/* + * call-seq: + * source_location -> [String, Integer] + */ +static mrb_value +binding_source_location(mrb_state *mrb, mrb_value self) +{ + if (mrb_iv_defined(mrb, self, MRB_SYM(source_location))) { + return mrb_iv_get(mrb, self, MRB_SYM(source_location)); + } + + mrb_value srcloc; + const struct RProc *proc = binding_extract_proc(mrb, self); + if (!proc || MRB_PROC_CFUNC_P(proc) || + !proc->upper || MRB_PROC_CFUNC_P(proc->upper)) { + srcloc = mrb_nil_value(); + goto cache_source_location; + } + + { + const mrb_irep *irep = proc->upper->body.irep; + mrb_int pc = binding_extract_pc(mrb, self); + if (pc < 0) { + srcloc = mrb_nil_value(); + } + else { + const char *fname = mrb_debug_get_filename(mrb, irep, (uint32_t)pc); + mrb_int fline = mrb_debug_get_line(mrb, irep, (uint32_t)pc); + + if (fname && fline >= 0) { + srcloc = mrb_assoc_new(mrb, mrb_str_new_cstr(mrb, fname), mrb_fixnum_value(fline)); + } + else { + srcloc = mrb_nil_value(); + } + } + } + +cache_source_location: + if (!mrb_frozen_p(mrb_obj_ptr(self))) { + mrb_iv_set(mrb, self, MRB_SYM(source_location), srcloc); + } + return srcloc; +} + +mrb_value +mrb_binding_alloc(mrb_state *mrb) +{ + struct RObject *obj = (struct RObject*)mrb_obj_alloc(mrb, MRB_TT_OBJECT, mrb_class_get_id(mrb, MRB_SYM(Binding))); + return mrb_obj_value(obj); +} + +struct RProc* +mrb_binding_wrap_lvspace(mrb_state *mrb, const struct RProc *proc, struct REnv **envp) +{ + /* + * local variable space: It is a space to hold the top-level variable of + * binding.eval and binding.local_variable_set. + */ + + static const mrb_code iseq_dummy[] = { OP_RETURN, 0 }; + + struct RProc *lvspace = (struct RProc*)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb->proc_class); + mrb_irep *irep = mrb_add_irep(mrb); + irep->flags = MRB_ISEQ_NO_FREE; + irep->iseq = iseq_dummy; + irep->ilen = sizeof(iseq_dummy) / sizeof(iseq_dummy[0]); + irep->lv = (mrb_sym*)mrb_calloc(mrb, 1, sizeof(mrb_sym)); /* initial allocation for dummy */ + irep->nlocals = 1; + irep->nregs = 1; + lvspace->body.irep = irep; + lvspace->upper = proc; + if (*envp) { + lvspace->e.env = *envp; + lvspace->flags |= MRB_PROC_ENVSET; + } + + *envp = (struct REnv*)mrb_obj_alloc(mrb, MRB_TT_ENV, NULL); + (*envp)->stack = (mrb_value*)mrb_calloc(mrb, 1, sizeof(mrb_value)); + (*envp)->stack[0] = lvspace->e.env ? lvspace->e.env->stack[0] : mrb_nil_value(); + (*envp)->cxt = lvspace->e.env ? lvspace->e.env->cxt : mrb->c; + (*envp)->mid = 0; + (*envp)->flags = MRB_ENV_CLOSED | MRB_ENV_HEAPED; + MRB_ENV_SET_LEN(*envp, 1); + + return lvspace; +} + +static mrb_value +mrb_f_binding(mrb_state *mrb, mrb_value self) +{ + mrb_value binding; + struct RProc *proc; + struct REnv *env; + + binding = mrb_binding_alloc(mrb); + proc = (struct RProc*)mrb_proc_get_caller(mrb, &env); + if (!env || MRB_PROC_CFUNC_P(proc)) { + proc = NULL; + env = NULL; + } + + if (proc && !MRB_PROC_CFUNC_P(proc)) { + const mrb_irep *irep = proc->body.irep; + mrb_iv_set(mrb, binding, MRB_SYM(pc), mrb_fixnum_value(mrb->c->ci[-1].pc - irep->iseq - 1 /* step back */)); + } + proc = mrb_binding_wrap_lvspace(mrb, proc, &env); + mrb_iv_set(mrb, binding, MRB_SYM(proc), mrb_obj_value(proc)); + mrb_iv_set(mrb, binding, MRB_SYM(recv), self); + mrb_iv_set(mrb, binding, MRB_SYM(env), mrb_obj_value(env)); + return binding; +} + +void +mrb_mruby_binding_core_gem_init(mrb_state *mrb) +{ + struct RClass *binding = mrb_define_class(mrb, "Binding", mrb->object_class); + mrb_undef_class_method(mrb, binding, "new"); + mrb_undef_class_method(mrb, binding, "allocate"); + + mrb_define_method(mrb, mrb->kernel_module, "binding", mrb_f_binding, MRB_ARGS_NONE()); + + mrb_define_method(mrb, binding, "local_variable_defined?", binding_local_variable_defined_p, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, binding, "local_variable_get", binding_local_variable_get, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, binding, "local_variable_set", binding_local_variable_set, MRB_ARGS_REQ(2)); + mrb_define_method(mrb, binding, "local_variables", binding_local_variables, MRB_ARGS_NONE()); + mrb_define_method(mrb, binding, "receiver", binding_receiver, MRB_ARGS_NONE()); + mrb_define_method(mrb, binding, "source_location", binding_source_location, MRB_ARGS_NONE()); + mrb_define_method(mrb, binding, "inspect", mrb_any_to_s, MRB_ARGS_NONE()); +} + +void +mrb_mruby_binding_core_gem_final(mrb_state *mrb) +{ +} diff --git a/mrbgems/mruby-binding-core/test/binding-core.rb b/mrbgems/mruby-binding-core/test/binding-core.rb new file mode 100644 index 000000000..066e79b18 --- /dev/null +++ b/mrbgems/mruby-binding-core/test/binding-core.rb @@ -0,0 +1,40 @@ +assert("Kernel.#binding") do + assert_kind_of Binding, binding +end + +assert("Binding#local_variables") do + block = Proc.new do |a| + b = 1 + binding + end + assert_equal [:a, :b, :block], block.call(0).local_variables.sort +end + +assert("Binding#local_variable_set") do + bind = binding + 1.times { + assert_equal(9, bind.local_variable_set(:x, 9)) + assert_raise(NameError) { x } + assert_equal([:bind, :x], bind.local_variables.sort) + } +end + +assert("Binding#local_variable_get") do + bind = binding + x = 1 + 1.times { + y = 2 + assert_equal(1, bind.local_variable_get(:x)) + x = 10 + assert_equal(10, bind.local_variable_get(:x)) + assert_raise(NameError) { bind.local_variable_get(:y) } + assert_equal([:bind, :x], bind.local_variables.sort) + } +end + +assert("Binding#source_location") do + skip unless -> {}.source_location + + bind, source_location = binding, [__FILE__, __LINE__] + assert_equal source_location, bind.source_location +end diff --git a/mrbgems/mruby-binding/mrbgem.rake b/mrbgems/mruby-binding/mrbgem.rake new file mode 100644 index 000000000..4ad5638ea --- /dev/null +++ b/mrbgems/mruby-binding/mrbgem.rake @@ -0,0 +1,11 @@ +MRuby::Gem::Specification.new('mruby-binding') do |spec| + spec.license = 'MIT' + spec.author = 'mruby developers' + spec.summary = 'Binding class' + + spec.add_dependency('mruby-binding-core', :core => 'mruby-binding-core') + spec.add_dependency('mruby-eval', :core => 'mruby-eval') + spec.add_test_dependency('mruby-metaprog', :core => 'mruby-metaprog') + spec.add_test_dependency('mruby-method', :core => 'mruby-method') + spec.add_test_dependency('mruby-proc-ext', :core => 'mruby-proc-ext') +end diff --git a/mrbgems/mruby-binding/mrblib/binding.rb b/mrbgems/mruby-binding/mrblib/binding.rb new file mode 100644 index 000000000..b07480db1 --- /dev/null +++ b/mrbgems/mruby-binding/mrblib/binding.rb @@ -0,0 +1,5 @@ +class Binding + def eval(expr, *args) + Kernel.eval(expr, self, *args) + end +end diff --git a/mrbgems/mruby-binding/test/binding.c b/mrbgems/mruby-binding/test/binding.c new file mode 100644 index 000000000..5a37ca043 --- /dev/null +++ b/mrbgems/mruby-binding/test/binding.c @@ -0,0 +1,13 @@ +#include <mruby.h> + +static mrb_value +binding_in_c(mrb_state *mrb, mrb_value self) +{ + return mrb_funcall_argv(mrb, mrb_obj_value(mrb->object_class), mrb_intern_lit(mrb, "binding"), 0, NULL); +} + +void +mrb_mruby_binding_gem_test(mrb_state *mrb) +{ + mrb_define_method(mrb, mrb->object_class, "binding_in_c", binding_in_c, MRB_ARGS_NONE()); +} diff --git a/mrbgems/mruby-binding/test/binding.rb b/mrbgems/mruby-binding/test/binding.rb new file mode 100644 index 000000000..7dd3fd1dd --- /dev/null +++ b/mrbgems/mruby-binding/test/binding.rb @@ -0,0 +1,70 @@ +assert("Binding#eval") do + b = nil + 1.times { x, y, z = 1, 2, 3; [x,y,z]; b = binding } + assert_equal([1, 2, 3], b.eval("[x, y, z]")) + here = self + assert_equal(here, b.eval("self")) +end + +assert("Binding#local_variables") do + block = Proc.new do |a| + b = 1 + binding + end + bind = block.call(0) + assert_equal [:a, :b, :bind, :block], bind.local_variables.sort + bind.eval("x = 2") + assert_equal [:a, :b, :bind, :block, :x], bind.local_variables.sort +end + +assert("Binding#local_variable_set") do + bind = binding + 1.times { + assert_equal(9, bind.local_variable_set(:x, 9)) + assert_equal(9, bind.eval("x")) + assert_equal([:bind, :x], bind.eval("local_variables.sort")) + } +end + +assert("Binding#local_variable_get") do + bind = binding + x = 1 + 1.times { + y = 2 + assert_equal(1, bind.local_variable_get(:x)) + x = 10 + assert_equal(10, bind.local_variable_get(:x)) + assert_raise(NameError) { bind.local_variable_get(:y) } + bind.eval("z = 3") + assert_equal(3, bind.local_variable_get(:z)) + bind.eval("y = 5") + assert_equal(5, bind.local_variable_get(:y)) + assert_equal(2, y) + } +end + +assert("Binding#source_location") do + skip unless -> {}.source_location + + bind, source_location = binding, [__FILE__, __LINE__] + assert_equal source_location, bind.source_location +end + +assert "Kernel#binding and .eval from C" do + bind = binding_in_c + assert_equal 5, bind.eval("2 + 3") + assert_nothing_raised { bind.eval("self") } +end + +assert "Binding#eval with Binding.new via UnboundMethod" do + assert_raise(NoMethodError) { Class.instance_method(:new).bind_call(Binding) } +end + +assert "Binding#eval with Binding.new via Method" do + # The following test is OK if SIGSEGV does not occur + cx = Class.new(Binding) + cx.define_singleton_method(:allocate, &Object.method(:allocate)) + Class.instance_method(:new).bind_call(cx).eval("") + + assert_true true +end diff --git a/mrbgems/mruby-catch/mrblib/catch.rb b/mrbgems/mruby-catch/mrblib/catch.rb index 89eedf66a..9a60a67a3 100644 --- a/mrbgems/mruby-catch/mrblib/catch.rb +++ b/mrbgems/mruby-catch/mrblib/catch.rb @@ -1,27 +1,8 @@ -class ThrowCatchJump < Exception - def initialize(tag, val) +class UncaughtThrowError < ArgumentError + attr_reader :tag, :value + def initialize(tag, value) @tag = tag - @val = val - super("uncaught throw :#{tag}") - end - def _tag - @tag - end - def _val - @val - end -end - -module Kernel - def catch(tag, &block) - block.call(tag) - rescue ThrowCatchJump => e - unless e._tag == tag - raise e - end - return e._val - end - def throw(tag, val=nil) - raise ThrowCatchJump.new(tag, val) + @value = value + super("uncaught throw #{tag.inspect}") end end diff --git a/mrbgems/mruby-catch/src/catch.c b/mrbgems/mruby-catch/src/catch.c new file mode 100644 index 000000000..d910cac7f --- /dev/null +++ b/mrbgems/mruby-catch/src/catch.c @@ -0,0 +1,128 @@ +#include <mruby.h> +#include <mruby/class.h> +#include <mruby/variable.h> +#include <mruby/error.h> +#include <mruby/proc.h> +#include <mruby/opcode.h> +#include <mruby/presym.h> + + +MRB_PRESYM_DEFINE_VAR_AND_INITER(catch_syms_3, 1, MRB_SYM(call)) +static const mrb_code catch_iseq_3[18] = { + OP_ENTER, 0x00, 0x00, 0x00, + OP_GETUPVAR, 0x02, 0x02, 0x01, + OP_GETUPVAR, 0x03, 0x01, 0x01, + OP_SEND, 0x02, 0x00, 0x01, + OP_RETURN, 0x02,}; +static const mrb_irep catch_irep_3 = { + 2,5,0, + MRB_IREP_STATIC,catch_iseq_3, + NULL,catch_syms_3,NULL, + NULL, + NULL, + 18,0,1,0,0 +}; +static const mrb_irep *catch_reps_2[1] = { + &catch_irep_3, +}; +static const mrb_code catch_iseq_2[13] = { + OP_ENTER, 0x00, 0x00, 0x00, + OP_LAMBDA, 0x02, 0x00, + OP_SEND, 0x02, 0x00, 0x00, + OP_RETURN, 0x02,}; +static const mrb_irep catch_irep_2 = { + 2,4,0, + MRB_IREP_STATIC,catch_iseq_2, + NULL,catch_syms_3,catch_reps_2, + NULL, + NULL, + 13,0,1,1,0 +}; +static const mrb_irep *catch_reps_1[1] = { + &catch_irep_2, +}; +MRB_PRESYM_DEFINE_VAR_AND_INITER(catch_syms_1, 3, MRB_SYM(Object), MRB_SYM(new), MRB_SYM(call)) +static const mrb_code catch_iseq_1[29] = { + OP_ENTER, 0x00, 0x20, 0x01, + OP_JMP, 0x00, 0x03, + OP_JMP, 0x00, 0x0a, + OP_GETCONST, 0x03, 0x00, + OP_SEND, 0x03, 0x01, 0x00, + OP_MOVE, 0x01, 0x03, + OP_LAMBDA, 0x03, 0x00, + OP_SEND, 0x03, 0x02, 0x00, + OP_RETURN, 0x03,}; +static const mrb_irep catch_irep = { + 3,5,0, + MRB_IREP_STATIC,catch_iseq_1, + NULL,catch_syms_1,catch_reps_1, + NULL, + NULL, + 29,0,3,1,0 +}; + +#define ID_PRESERVED_CATCH MRB_SYM(__preserved_catch_proc) + +static const mrb_callinfo * +find_catcher(mrb_state *mrb, mrb_value tag) +{ + mrb_value pval = mrb_obj_iv_get(mrb, (struct RObject *)mrb->kernel_module, ID_PRESERVED_CATCH); + mrb_assert(mrb_proc_p(pval)); + const struct RProc *proc = mrb_proc_ptr(pval); + + const mrb_callinfo *ci = mrb->c->ci; + size_t n = ci - mrb->c->cibase; + ci--; + for (; n > 0; n--, ci--) { + const mrb_value *arg1 = ci->stack + 1; + if (ci->proc == proc && mrb_obj_eq(mrb, *arg1, tag)) { + return ci; + } + } + + return NULL; +} + +static mrb_value +mrb_f_throw(mrb_state *mrb, mrb_value self) +{ + mrb_value tag, obj; + if (mrb_get_args(mrb, "o|o", &tag, &obj) == 1) { + obj = mrb_nil_value(); + } + + const mrb_callinfo *ci = find_catcher(mrb, tag); + if (ci) { + struct RBreak *b = (struct RBreak *)mrb_obj_alloc(mrb, MRB_TT_BREAK, NULL); + mrb_break_value_set(b, obj); + mrb_break_proc_set(b, ci[2].proc); /* Back to the closure in `catch` method */ + mrb_exc_raise(mrb, mrb_obj_value(b)); + } + else { + mrb_value argv[2] = {tag, obj}; + mrb_exc_raise(mrb, mrb_obj_new(mrb, mrb_exc_get_id(mrb, MRB_ERROR_SYM(UncaughtThrowError)), 2, argv)); + } + /* not reached */ + return mrb_nil_value(); +} + +void +mrb_mruby_catch_gem_init(mrb_state *mrb) +{ + struct RProc *p; + mrb_method_t m; + + MRB_PRESYM_INIT_SYMBOLS(mrb, catch_syms_3); + MRB_PRESYM_INIT_SYMBOLS(mrb, catch_syms_1); + p = mrb_proc_new(mrb, &catch_irep); + MRB_METHOD_FROM_PROC(m, p); + mrb_define_method_raw(mrb, mrb->kernel_module, MRB_SYM(catch), m); + mrb_obj_iv_set(mrb, (struct RObject *)mrb->kernel_module, ID_PRESERVED_CATCH, mrb_obj_value(p)); + + mrb_define_method(mrb, mrb->kernel_module, "throw", mrb_f_throw, MRB_ARGS_ARG(1,1)); +} + +void +mrb_mruby_catch_gem_final(mrb_state *mrb) +{ +} diff --git a/mrbgems/mruby-catch/test/catch.rb b/mrbgems/mruby-catch/test/catch.rb new file mode 100644 index 000000000..38a4eb907 --- /dev/null +++ b/mrbgems/mruby-catch/test/catch.rb @@ -0,0 +1,86 @@ +assert "return throw value" do + val = ["val"] + result = catch :foo do + loop do + loop do + begin + throw :foo, val + rescue Exception + flunk("should not reach here 1") + end + break + end + flunk("should not reach here 2") + end + false + end + assert_same(val, result) +end + +assert "no throw" do + assert_equal(:foo, catch(:bar){:foo}) +end + +assert "no throw value" do + result = catch :foo do + throw :foo + 1 + end + assert_equal(nil, result) +end + +assert "pass the given tag to block" do + tag = [:foo] + catch(tag){|t| assert_same(tag, t)} +end + +assert "tag identity, uncaught throw" do + tag, val = [:tag], [:val] + catch [:tag] do + throw tag, val + end + flunk("should not reach here") +rescue Exception => e + assert_match("uncaught throw *", e.message) + assert_same(tag, e.tag) + assert_same(val, e.value) +end + +assert "without catch arguments" do + result = catch do |tag1| + catch do |tag2| + throw tag1, 1 + flunk("should not reach here 1") + end + flunk("should not reach here 2") + end + assert_equal(1, result) +end + +assert "catches across invocation boundaries" do + v = [] + catch :one do + v << 1 + catch :two do + v << 2 + throw :one + v << 3 + end + v << 4 + end + assert_equal([1,2], v) +end + +assert "catches in the nested invocation with the same key" do + v = [] + catch :tag do + v << 1 + catch :tag do + v << 2 + throw :tag + v << 3 + end + v << 4 + end + assert_equal([1,2,4], v) +end diff --git a/mrbgems/mruby-cmath/mrbgem.rake b/mrbgems/mruby-cmath/mrbgem.rake new file mode 100644 index 000000000..00ac4b091 --- /dev/null +++ b/mrbgems/mruby-cmath/mrbgem.rake @@ -0,0 +1,8 @@ +# This `mruby-cmath` gem uses C99 _Complex features +# You need C compiler that support C99+ +MRuby::Gem::Specification.new('mruby-cmath') do |spec| + spec.license = 'MIT' + spec.author = 'mruby developers' + spec.summary = 'standard Math module with complex' + spec.add_dependency 'mruby-complex' +end diff --git a/mrbgems/mruby-cmath/src/cmath.c b/mrbgems/mruby-cmath/src/cmath.c new file mode 100644 index 000000000..03b181840 --- /dev/null +++ b/mrbgems/mruby-cmath/src/cmath.c @@ -0,0 +1,270 @@ +/* +** cmath.c - Math module with complex numbers +** +** See Copyright Notice in mruby.h +*/ + +/* +** This `mruby-cmath` gem uses C99 _Complex features +** You need C compiler that support C99+ +*/ + +#include <mruby.h> + +#ifdef MRB_NO_FLOAT +# error CMath conflicts with 'MRB_NO_FLOAT' configuration +#endif + +#include <math.h> +#include <complex.h> + +mrb_value mrb_complex_new(mrb_state *mrb, mrb_float real, mrb_float imag); +void mrb_complex_get(mrb_state *mrb, mrb_value cpx, mrb_float*, mrb_float*); + +static mrb_bool +cmath_get_complex(mrb_state *mrb, mrb_value c, mrb_float *r, mrb_float *i) +{ + if (mrb_integer_p(c)) { + *r = (mrb_float)mrb_integer(c); + *i = 0; + return FALSE; + } + else if (mrb_float_p(c)) { + *r = mrb_float(c); + *i = 0; + return FALSE; + } + else if (mrb_obj_is_kind_of(mrb, c, mrb_class_get(mrb, "Complex"))) { + mrb_complex_get(mrb, c, r, i); + return TRUE; + } + else { + mrb_raise(mrb, E_TYPE_ERROR, "Numeric required"); + return FALSE; + } +} + +#ifdef MRB_USE_FLOAT32 +#define F(x) x##f +#else +#define F(x) x +#endif + +#if defined(_WIN32) && !defined(__MINGW32__) + +#ifdef MRB_USE_FLOAT32 +typedef _Fcomplex mrb_complex; +#define CX(r,i) _FCbuild(r,i) +#else +typedef _Dcomplex mrb_complex; +#define CX(r,i) _Cbuild(r,i) +#endif + +static mrb_complex +CXDIVf(mrb_complex x, mrb_float y) +{ + return CX(creal(x)/y, cimag(x)/y); +} + +static mrb_complex +CXDIVc(mrb_complex a, mrb_complex b) +{ + mrb_float ratio, den; + mrb_float abr, abi, cr, ci; + + if ((abr = creal(b)) < 0) + abr = - abr; + if ((abi = cimag(b)) < 0) + abi = - abi; + if (abr <= abi) { + ratio = creal(b) / cimag(b) ; + den = cimag(a) * (1 + ratio*ratio); + cr = (creal(a)*ratio + cimag(a)) / den; + ci = (cimag(a)*ratio - creal(a)) / den; + } + else { + ratio = cimag(b) / creal(b) ; + den = creal(a) * (1 + ratio*ratio); + cr = (creal(a) + cimag(a)*ratio) / den; + ci = (cimag(a) - creal(a)*ratio) / den; + } + return CX(cr, ci); +} + +#else + +#if defined(__cplusplus) && defined(__APPLE__) + +#ifdef MRB_USE_FLOAT32 +typedef std::complex<float> mrb_complex; +#else +typedef std::complex<double> mrb_complex; +#endif /* MRB_USE_FLOAT32 */ + +#define CX(r,i) mrb_complex(r,i) +#define creal(c) c.real() +#define cimag(c) c.imag() +#define FC(n) F(n) + +#else /* cpp */ + +#ifdef MRB_USE_FLOAT32 +typedef float _Complex mrb_complex; +#else +typedef double _Complex mrb_complex; +#endif /* MRB_USE_FLOAT32 */ + +#define CX(r,i) ((r)+(i)*_Complex_I) +#endif + +#define CXDIVf(x,y) (x)/(y) +#define CXDIVc(x,y) (x)/(y) + +#endif + +#ifndef FC +#define FC(n) F(c ## n) +#endif + +#define DEF_CMATH_METHOD(name) \ +static mrb_value \ +cmath_ ## name(mrb_state *mrb, mrb_value self)\ +{\ + mrb_value z = mrb_get_arg1(mrb);\ + mrb_float real, imag;\ + if (cmath_get_complex(mrb, z, &real, &imag)) {\ + mrb_complex c = CX(real,imag);\ + c = FC(name)(c);\ + return mrb_complex_new(mrb, creal(c), cimag(c));\ + }\ + return mrb_float_value(mrb, F(name)(real));\ +} + +/* exp(z): return the exponential of z */ +DEF_CMATH_METHOD(exp) + +/* log(z): return the natural logarithm of z, with branch cut along the negative real axis */ +static mrb_value +cmath_log(mrb_state *mrb, mrb_value self) { + mrb_value z; + mrb_float base; + mrb_float real, imag; + + mrb_int n = mrb_get_args(mrb, "o|f", &z, &base); + +#ifndef M_E +#define M_E F(exp)(1.0) +#endif + + if (n == 1) base = M_E; + if (cmath_get_complex(mrb, z, &real, &imag) || real < 0.0) { + mrb_complex c = CX(real,imag); + c = FC(log)(c); + if (n == 2) c = CXDIVc(c, FC(log)(CX(base,0))); + return mrb_complex_new(mrb, creal(c), cimag(c)); + } + if (n == 1) return mrb_float_value(mrb, F(log)(real)); + return mrb_float_value(mrb, F(log)(real)/F(log)(base)); +} + +/* log10(z): return the base-10 logarithm of z, with branch cut along the negative real axis */ +static mrb_value +cmath_log10(mrb_state *mrb, mrb_value self) { + mrb_value z = mrb_get_arg1(mrb); + mrb_float real, imag; + if (cmath_get_complex(mrb, z, &real, &imag) || real < 0.0) { + mrb_complex c = CX(real,imag); + c = CXDIVf(FC(log)(c),log(10)); + return mrb_complex_new(mrb, creal(c), cimag(c)); + } + return mrb_float_value(mrb, F(log10)(real)); +} + +/* log2(z): return the base-2 logarithm of z, with branch cut along the negative real axis */ +static mrb_value +cmath_log2(mrb_state *mrb, mrb_value self) { + mrb_value z = mrb_get_arg1(mrb); + mrb_float real, imag; + if (cmath_get_complex(mrb, z, &real, &imag) || real < 0.0) { + mrb_complex c = CX(real,imag); + c = CXDIVf(FC(log)(c),log(2.0)); + return mrb_complex_new(mrb, creal(c), cimag(c)); + } + return mrb_float_value(mrb, F(log2)(real)); +} + +/* sqrt(z): return square root of z */ +static mrb_value +cmath_sqrt(mrb_state *mrb, mrb_value self) { + mrb_value z = mrb_get_arg1(mrb); + mrb_float real, imag; + if (cmath_get_complex(mrb, z, &real, &imag) || real < 0.0) { + mrb_complex c = CX(real,imag); + c = FC(sqrt)(c); + return mrb_complex_new(mrb, creal(c), cimag(c)); + } + return mrb_float_value(mrb, F(sqrt)(real)); +} + +/* sin(z): sine function */ +DEF_CMATH_METHOD(sin) +/* cos(z): cosine function */ +DEF_CMATH_METHOD(cos) +/* tan(z): tangent function */ +DEF_CMATH_METHOD(tan) +/* asin(z): arc sine function */ +DEF_CMATH_METHOD(asin) +/* acos(z): arc cosine function */ +DEF_CMATH_METHOD(acos) +/* atan(z): arg tangent function */ +DEF_CMATH_METHOD(atan) +/* sinh(z): hyperbolic sine function */ +DEF_CMATH_METHOD(sinh) +/* cosh(z): hyperbolic cosine function */ +DEF_CMATH_METHOD(cosh) +/* tanh(z): hyperbolic tangent function */ +DEF_CMATH_METHOD(tanh) +/* asinh(z): inverse hyperbolic sine function */ +DEF_CMATH_METHOD(asinh) +/* acosh(z): inverse hyperbolic cosine function */ +DEF_CMATH_METHOD(acosh) +/* atanh(z): inverse hyperbolic tangent function */ +DEF_CMATH_METHOD(atanh) + +/* ------------------------------------------------------------------------*/ + +void +mrb_mruby_cmath_gem_init(mrb_state* mrb) +{ + struct RClass *cmath; + cmath = mrb_define_module(mrb, "CMath"); + + mrb_include_module(mrb, cmath, mrb_module_get(mrb, "Math")); + + mrb_define_module_function(mrb, cmath, "sin", cmath_sin, MRB_ARGS_REQ(1)); + mrb_define_module_function(mrb, cmath, "cos", cmath_cos, MRB_ARGS_REQ(1)); + mrb_define_module_function(mrb, cmath, "tan", cmath_tan, MRB_ARGS_REQ(1)); + + mrb_define_module_function(mrb, cmath, "asin", cmath_asin, MRB_ARGS_REQ(1)); + mrb_define_module_function(mrb, cmath, "acos", cmath_acos, MRB_ARGS_REQ(1)); + mrb_define_module_function(mrb, cmath, "atan", cmath_atan, MRB_ARGS_REQ(1)); + + mrb_define_module_function(mrb, cmath, "sinh", cmath_sinh, MRB_ARGS_REQ(1)); + mrb_define_module_function(mrb, cmath, "cosh", cmath_cosh, MRB_ARGS_REQ(1)); + mrb_define_module_function(mrb, cmath, "tanh", cmath_tanh, MRB_ARGS_REQ(1)); + + mrb_define_module_function(mrb, cmath, "asinh", cmath_asinh, MRB_ARGS_REQ(1)); + mrb_define_module_function(mrb, cmath, "acosh", cmath_acosh, MRB_ARGS_REQ(1)); + mrb_define_module_function(mrb, cmath, "atanh", cmath_atanh, MRB_ARGS_REQ(1)); + + mrb_define_module_function(mrb, cmath, "exp", cmath_exp, MRB_ARGS_REQ(1)); + mrb_define_module_function(mrb, cmath, "log", cmath_log, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1)); + mrb_define_module_function(mrb, cmath, "log2", cmath_log2, MRB_ARGS_REQ(1)); + mrb_define_module_function(mrb, cmath, "log10", cmath_log10, MRB_ARGS_REQ(1)); + mrb_define_module_function(mrb, cmath, "sqrt", cmath_sqrt, MRB_ARGS_REQ(1)); +} + +void +mrb_mruby_cmath_gem_final(mrb_state* mrb) +{ +} diff --git a/mrbgems/mruby-cmath/test/cmath.rb b/mrbgems/mruby-cmath/test/cmath.rb new file mode 100644 index 000000000..ddd0e5106 --- /dev/null +++ b/mrbgems/mruby-cmath/test/cmath.rb @@ -0,0 +1,41 @@ +## +# CMath Test + +def assert_complex(c1, c2) + assert('assert_complex') do + assert_float(c1.real, c2.real) + assert_float(c1.imaginary, c2.imaginary) + end +end + +assert('CMath.exp') do + assert_float(1.0, CMath.exp(0)) + assert_complex(-1+0i, CMath.exp(Math::PI.i)) + assert_complex((-1.1312043837568135+2.4717266720048188i), CMath.exp(1+2i)) +end + +assert('CMath.log') do + assert_float(0, CMath.log(1)) + assert_float(3.0, CMath.log(8,2)) + assert_complex((1.092840647090816-0.42078724841586035i), CMath.log(-8,-2)) +end + +assert('CMath.sqrt') do + assert_complex(Complex(0,2), CMath.sqrt(-4.0)) + assert_complex(Complex(0,3), CMath.sqrt(-9.0)) +end + +assert('CMath trigonometric_functions') do + assert_complex(Math.sinh(2).i, CMath.sin(2i)) + assert_complex(Math.cosh(2)+0i, CMath.cos(2i)) + assert_complex(Math.tanh(2).i, CMath.tan(2i)) + assert_complex(Math.sin(2).i, CMath.sinh(2i)) + assert_complex(Math.cos(2)+0i, CMath.cosh(2i)) + assert_complex(Math.tan(2).i, CMath.tanh(2i)) + assert_complex(1+1i, CMath.sin(CMath.asin(1+1i))) + assert_complex(1+1i, CMath.cos(CMath.acos(1+1i))) + assert_complex(1+1i, CMath.tan(CMath.atan(1+1i))) + assert_complex(1+1i, CMath.sinh(CMath.asinh(1+1i))) + assert_complex(1+1i, CMath.cosh(CMath.acosh(1+1i))) + assert_complex(1+1i, CMath.tanh(CMath.atanh(1+1i))) +end diff --git a/mrbgems/mruby-compiler/core/lex.def b/mrbgems/mruby-compiler/core/lex.def index 944aaf4a8..7c6f316f0 100644 --- a/mrbgems/mruby-compiler/core/lex.def +++ b/mrbgems/mruby-compiler/core/lex.def @@ -205,4 +205,3 @@ mrb_reserved_word (register const char *str, register size_t len) return 0; } #line 52 "mrbgems/mruby-compiler/core/keywords" - diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 1a97b3ec6..0bd8e7daf 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -1205,6 +1205,21 @@ args_with_block(parser_state *p, node *a, node *b) } static void +endless_method_name(parser_state *p, node *defn) +{ + mrb_sym sym = sym(defn->cdr->car); + mrb_int len; + const char *name = mrb_sym_name_len(p->mrb, sym, &len); + + if (len > 1 && name[len-1] == '=') { + for (int i=0; i<len-1; i++) { + if (!identchar(name[i])) return; + } + yyerror(p, "setter method cannot be defined by endless method definition"); + } +} + +static void call_with_block(parser_state *p, node *a, node *b) { node *n; @@ -1450,7 +1465,7 @@ heredoc_end(parser_state *p) %token <nd> tSTRING tSTRING_PART tSTRING_MID %token <nd> tNTH_REF tBACK_REF %token <num> tREGEXP_END -%token <num> tNUMPARAM "numbered paraemeter" +%token <num> tNUMPARAM "numbered parameter" %type <nd> singleton string string_fragment string_rep string_interp xstring regexp %type <nd> literal numeric cpath symbol defn_head defs_head @@ -1463,7 +1478,8 @@ heredoc_end(parser_state *p) %type <nd> command_args aref_args opt_block_arg block_arg var_ref var_lhs %type <nd> command_asgn command_rhs mrhs superclass block_call block_command %type <nd> f_block_optarg f_block_opt -%type <nd> f_arglist_paren f_arglist f_args f_arg f_arg_item f_optarg f_margs +%type <nd> f_opt_arglist_paren f_arglist_paren f_arglist +%type <nd> f_args f_arg f_arg_item f_optarg f_margs %type <nd> assoc_list assocs assoc undef_list backref for_var %type <nd> block_param opt_block_param block_param_def f_opt %type <nd> bv_decls opt_bv_decl bvar f_larglist lambda_body @@ -2335,17 +2351,19 @@ arg : lhs '=' arg_rhs { $$ = new_if(p, cond($1), $3, $6); } - | defn_head f_arglist_paren '=' arg + | defn_head f_opt_arglist_paren '=' arg { $$ = $1; + endless_method_name(p, $1); void_expr_error(p, $4); defn_setup(p, $$, $2, $4); nvars_unnest(p); p->in_def--; } - | defn_head f_arglist_paren '=' arg modifier_rescue arg + | defn_head f_opt_arglist_paren '=' arg modifier_rescue arg { $$ = $1; + endless_method_name(p, $1); void_expr_error(p, $4); void_expr_error(p, $6); defn_setup(p, $$, $2, new_mod_rescue(p, $4, $6)); @@ -3516,6 +3534,11 @@ superclass : /* term */ } */ ; +f_opt_arglist_paren + : f_arglist_paren + | none + ; + f_arglist_paren : '(' f_args rparen { $$ = $2; @@ -4682,6 +4705,7 @@ heredoc_remove_indent(parser_state *p, parser_heredoc_info *hinf) start = 0; while (start < len) { end = escaped ? (size_t)escaped->car : len; + if (end > len) end = len; spaces = (size_t)nspaces->car; size_t esclen = end - start; heredoc_count_indent(hinf, str + start, esclen, spaces, &offset); diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c index 6c7940a7b..b27b6a136 100644 --- a/mrbgems/mruby-compiler/core/y.tab.c +++ b/mrbgems/mruby-compiler/core/y.tab.c @@ -1268,6 +1268,21 @@ args_with_block(parser_state *p, node *a, node *b) } static void +endless_method_name(parser_state *p, node *defn) +{ + mrb_sym sym = sym(defn->cdr->car); + mrb_int len; + const char *name = mrb_sym_name_len(p->mrb, sym, &len); + + if (len > 1 && name[len-1] == '=') { + for (int i=0; i<len-1; i++) { + if (!identchar(name[i])) return; + } + yyerror(p, "setter method cannot be defined by endless method definition"); + } +} + +static void call_with_block(parser_state *p, node *a, node *b) { node *n; @@ -1433,7 +1448,7 @@ heredoc_end(parser_state *p) /* xxx ----------------------------- */ -#line 1437 "mrbgems/mruby-compiler/core/y.tab.c" +#line 1452 "mrbgems/mruby-compiler/core/y.tab.c" # ifndef YY_CAST # ifdef __cplusplus @@ -1605,7 +1620,7 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 1379 "mrbgems/mruby-compiler/core/parse.y" +#line 1394 "mrbgems/mruby-compiler/core/parse.y" node *nd; mrb_sym id; @@ -1613,7 +1628,7 @@ union YYSTYPE stack_type stack; const struct vtable *vars; -#line 1617 "mrbgems/mruby-compiler/core/y.tab.c" +#line 1632 "mrbgems/mruby-compiler/core/y.tab.c" }; typedef union YYSTYPE YYSTYPE; @@ -1931,16 +1946,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 12618 +#define YYLAST 12611 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 149 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 176 +#define YYNNTS 177 /* YYNRULES -- Number of rules. */ -#define YYNRULES 605 +#define YYNRULES 607 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 1061 +#define YYNSTATES 1063 #define YYUNDEFTOK 2 #define YYMAXUTOK 377 @@ -1999,67 +2014,67 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 1549, 1549, 1549, 1560, 1566, 1570, 1575, 1579, 1585, - 1587, 1586, 1600, 1627, 1633, 1637, 1642, 1646, 1652, 1652, - 1656, 1660, 1664, 1668, 1672, 1676, 1680, 1685, 1686, 1690, - 1694, 1698, 1702, 1709, 1712, 1716, 1720, 1724, 1728, 1732, - 1737, 1741, 1748, 1749, 1753, 1757, 1758, 1762, 1766, 1770, - 1774, 1778, 1788, 1787, 1802, 1811, 1812, 1815, 1816, 1823, - 1822, 1837, 1841, 1846, 1850, 1855, 1859, 1864, 1868, 1872, - 1876, 1880, 1886, 1890, 1896, 1897, 1903, 1907, 1911, 1915, - 1919, 1923, 1927, 1931, 1935, 1939, 1945, 1946, 1952, 1956, - 1962, 1966, 1972, 1976, 1980, 1984, 1988, 1992, 1998, 2004, - 2011, 2015, 2019, 2023, 2027, 2031, 2037, 2043, 2048, 2054, - 2058, 2061, 2065, 2069, 2076, 2077, 2078, 2079, 2084, 2091, - 2092, 2095, 2099, 2099, 2105, 2106, 2107, 2108, 2109, 2110, - 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, - 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, - 2131, 2132, 2133, 2134, 2137, 2137, 2137, 2138, 2138, 2139, - 2139, 2139, 2140, 2140, 2140, 2140, 2141, 2141, 2141, 2142, - 2142, 2142, 2143, 2143, 2143, 2143, 2144, 2144, 2144, 2144, - 2145, 2145, 2145, 2145, 2146, 2146, 2146, 2146, 2147, 2147, - 2147, 2147, 2148, 2148, 2151, 2155, 2159, 2163, 2167, 2171, - 2175, 2180, 2185, 2190, 2194, 2198, 2202, 2206, 2210, 2214, - 2218, 2222, 2226, 2230, 2234, 2238, 2242, 2246, 2250, 2254, - 2258, 2262, 2266, 2270, 2274, 2278, 2282, 2286, 2290, 2294, - 2298, 2302, 2306, 2310, 2314, 2318, 2322, 2326, 2330, 2334, - 2338, 2346, 2355, 2364, 2374, 2380, 2381, 2386, 2390, 2397, - 2401, 2409, 2413, 2429, 2455, 2456, 2459, 2460, 2461, 2466, - 2471, 2478, 2484, 2489, 2494, 2499, 2506, 2506, 2517, 2523, - 2527, 2533, 2534, 2537, 2543, 2549, 2554, 2561, 2566, 2571, - 2578, 2579, 2580, 2581, 2582, 2583, 2584, 2585, 2589, 2594, - 2593, 2605, 2609, 2604, 2614, 2614, 2618, 2622, 2626, 2630, - 2635, 2640, 2644, 2648, 2652, 2656, 2660, 2661, 2667, 2673, - 2666, 2685, 2693, 2701, 2701, 2701, 2708, 2708, 2708, 2715, - 2721, 2726, 2728, 2725, 2737, 2735, 2753, 2758, 2751, 2775, - 2773, 2789, 2799, 2810, 2814, 2818, 2822, 2828, 2835, 2836, - 2837, 2840, 2841, 2844, 2845, 2853, 2854, 2860, 2864, 2867, - 2871, 2875, 2879, 2884, 2888, 2892, 2896, 2902, 2901, 2911, - 2915, 2919, 2923, 2929, 2934, 2939, 2943, 2947, 2951, 2955, - 2959, 2963, 2967, 2971, 2975, 2979, 2983, 2987, 2991, 2995, - 3001, 3006, 3013, 3013, 3017, 3022, 3029, 3033, 3039, 3040, - 3043, 3048, 3051, 3055, 3061, 3065, 3072, 3071, 3086, 3096, - 3100, 3105, 3112, 3116, 3120, 3124, 3128, 3132, 3136, 3140, - 3144, 3151, 3150, 3165, 3164, 3180, 3188, 3197, 3200, 3207, - 3210, 3214, 3215, 3218, 3222, 3225, 3229, 3232, 3233, 3234, - 3235, 3238, 3239, 3245, 3246, 3247, 3251, 3257, 3258, 3264, - 3269, 3268, 3279, 3283, 3289, 3293, 3299, 3303, 3309, 3312, - 3313, 3316, 3322, 3328, 3329, 3332, 3339, 3338, 3352, 3356, - 3363, 3368, 3375, 3381, 3382, 3383, 3384, 3385, 3389, 3395, - 3399, 3405, 3406, 3407, 3411, 3417, 3421, 3425, 3429, 3433, - 3439, 3443, 3449, 3453, 3457, 3461, 3465, 3469, 3477, 3484, - 3495, 3496, 3500, 3504, 3503, 3519, 3525, 3543, 3563, 3564, - 3570, 3576, 3582, 3589, 3594, 3601, 3605, 3611, 3615, 3621, - 3622, 3625, 3629, 3635, 3639, 3643, 3647, 3653, 3658, 3663, - 3667, 3671, 3675, 3679, 3683, 3687, 3691, 3695, 3699, 3703, - 3707, 3711, 3715, 3720, 3726, 3731, 3736, 3741, 3746, 3753, - 3757, 3764, 3769, 3768, 3780, 3784, 3790, 3798, 3806, 3814, - 3818, 3824, 3828, 3834, 3835, 3838, 3843, 3850, 3851, 3854, - 3860, 3864, 3870, 3875, 3875, 3900, 3901, 3907, 3912, 3918, - 3919, 3922, 3928, 3933, 3943, 3950, 3951, 3952, 3955, 3956, - 3957, 3958, 3961, 3962, 3963, 3966, 3967, 3970, 3974, 3980, - 3981, 3987, 3988, 3991, 3992, 3995, 3998, 3999, 4000, 4003, - 4004, 4005, 4008, 4015, 4016, 4020 + 0, 1565, 1565, 1565, 1576, 1582, 1586, 1591, 1595, 1601, + 1603, 1602, 1616, 1643, 1649, 1653, 1658, 1662, 1668, 1668, + 1672, 1676, 1680, 1684, 1688, 1692, 1696, 1701, 1702, 1706, + 1710, 1714, 1718, 1725, 1728, 1732, 1736, 1740, 1744, 1748, + 1753, 1757, 1764, 1765, 1769, 1773, 1774, 1778, 1782, 1786, + 1790, 1794, 1804, 1803, 1818, 1827, 1828, 1831, 1832, 1839, + 1838, 1853, 1857, 1862, 1866, 1871, 1875, 1880, 1884, 1888, + 1892, 1896, 1902, 1906, 1912, 1913, 1919, 1923, 1927, 1931, + 1935, 1939, 1943, 1947, 1951, 1955, 1961, 1962, 1968, 1972, + 1978, 1982, 1988, 1992, 1996, 2000, 2004, 2008, 2014, 2020, + 2027, 2031, 2035, 2039, 2043, 2047, 2053, 2059, 2064, 2070, + 2074, 2077, 2081, 2085, 2092, 2093, 2094, 2095, 2100, 2107, + 2108, 2111, 2115, 2115, 2121, 2122, 2123, 2124, 2125, 2126, + 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, + 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, + 2147, 2148, 2149, 2150, 2153, 2153, 2153, 2154, 2154, 2155, + 2155, 2155, 2156, 2156, 2156, 2156, 2157, 2157, 2157, 2158, + 2158, 2158, 2159, 2159, 2159, 2159, 2160, 2160, 2160, 2160, + 2161, 2161, 2161, 2161, 2162, 2162, 2162, 2162, 2163, 2163, + 2163, 2163, 2164, 2164, 2167, 2171, 2175, 2179, 2183, 2187, + 2191, 2196, 2201, 2206, 2210, 2214, 2218, 2222, 2226, 2230, + 2234, 2238, 2242, 2246, 2250, 2254, 2258, 2262, 2266, 2270, + 2274, 2278, 2282, 2286, 2290, 2294, 2298, 2302, 2306, 2310, + 2314, 2318, 2322, 2326, 2330, 2334, 2338, 2342, 2346, 2350, + 2354, 2363, 2373, 2382, 2392, 2398, 2399, 2404, 2408, 2415, + 2419, 2427, 2431, 2447, 2473, 2474, 2477, 2478, 2479, 2484, + 2489, 2496, 2502, 2507, 2512, 2517, 2524, 2524, 2535, 2541, + 2545, 2551, 2552, 2555, 2561, 2567, 2572, 2579, 2584, 2589, + 2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 2607, 2612, + 2611, 2623, 2627, 2622, 2632, 2632, 2636, 2640, 2644, 2648, + 2653, 2658, 2662, 2666, 2670, 2674, 2678, 2679, 2685, 2691, + 2684, 2703, 2711, 2719, 2719, 2719, 2726, 2726, 2726, 2733, + 2739, 2744, 2746, 2743, 2755, 2753, 2771, 2776, 2769, 2793, + 2791, 2807, 2817, 2828, 2832, 2836, 2840, 2846, 2853, 2854, + 2855, 2858, 2859, 2862, 2863, 2871, 2872, 2878, 2882, 2885, + 2889, 2893, 2897, 2902, 2906, 2910, 2914, 2920, 2919, 2929, + 2933, 2937, 2941, 2947, 2952, 2957, 2961, 2965, 2969, 2973, + 2977, 2981, 2985, 2989, 2993, 2997, 3001, 3005, 3009, 3013, + 3019, 3024, 3031, 3031, 3035, 3040, 3047, 3051, 3057, 3058, + 3061, 3066, 3069, 3073, 3079, 3083, 3090, 3089, 3104, 3114, + 3118, 3123, 3130, 3134, 3138, 3142, 3146, 3150, 3154, 3158, + 3162, 3169, 3168, 3183, 3182, 3198, 3206, 3215, 3218, 3225, + 3228, 3232, 3233, 3236, 3240, 3243, 3247, 3250, 3251, 3252, + 3253, 3256, 3257, 3263, 3264, 3265, 3269, 3275, 3276, 3282, + 3287, 3286, 3297, 3301, 3307, 3311, 3317, 3321, 3327, 3330, + 3331, 3334, 3340, 3346, 3347, 3350, 3357, 3356, 3370, 3374, + 3381, 3386, 3393, 3399, 3400, 3401, 3402, 3403, 3407, 3413, + 3417, 3423, 3424, 3425, 3429, 3435, 3439, 3443, 3447, 3451, + 3457, 3461, 3467, 3471, 3475, 3479, 3483, 3487, 3495, 3502, + 3513, 3514, 3518, 3522, 3521, 3538, 3539, 3542, 3548, 3566, + 3586, 3587, 3593, 3599, 3605, 3612, 3617, 3624, 3628, 3634, + 3638, 3644, 3645, 3648, 3652, 3658, 3662, 3666, 3670, 3676, + 3681, 3686, 3690, 3694, 3698, 3702, 3706, 3710, 3714, 3718, + 3722, 3726, 3730, 3734, 3738, 3743, 3749, 3754, 3759, 3764, + 3769, 3776, 3780, 3787, 3792, 3791, 3803, 3807, 3813, 3821, + 3829, 3837, 3841, 3847, 3851, 3857, 3858, 3861, 3866, 3873, + 3874, 3877, 3883, 3887, 3893, 3898, 3898, 3923, 3924, 3930, + 3935, 3941, 3942, 3945, 3951, 3956, 3966, 3973, 3974, 3975, + 3978, 3979, 3980, 3981, 3984, 3985, 3986, 3989, 3990, 3993, + 3997, 4003, 4004, 4010, 4011, 4014, 4015, 4018, 4021, 4022, + 4023, 4026, 4027, 4028, 4031, 4038, 4039, 4043 }; #endif @@ -2085,7 +2100,7 @@ static const char *const yytname[] = "\"constant\"", "\"class variable\"", "\"label\"", "\"integer literal\"", "\"float literal\"", "\"character literal\"", "tXSTRING", "tREGEXP", "tSTRING", "tSTRING_PART", "tSTRING_MID", "tNTH_REF", "tBACK_REF", - "tREGEXP_END", "\"numbered paraemeter\"", "\"unary plus\"", + "tREGEXP_END", "\"numbered parameter\"", "\"unary plus\"", "\"unary minus\"", "\"<=>\"", "\"==\"", "\"===\"", "\"!=\"", "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"", "\"!~\"", "\"..\"", "\"...\"", "tBDOT2", "tBDOT3", "tAREF", "tASET", "\"<<\"", "\">>\"", "\"::\"", @@ -2120,15 +2135,15 @@ static const char *const yytname[] = "heredoc_body", "heredoc_string_rep", "heredoc_string_interp", "@30", "words", "symbol", "basic_symbol", "sym", "symbols", "numeric", "variable", "var_lhs", "var_ref", "backref", "superclass", "$@31", - "f_arglist_paren", "f_arglist", "f_label", "f_kw", "f_block_kw", - "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest", "args_tail", - "opt_args_tail", "f_args", "f_bad_arg", "f_norm_arg", "f_arg_item", - "@32", "f_arg", "f_opt_asgn", "f_opt", "f_block_opt", "f_block_optarg", - "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg", - "opt_f_block_arg", "singleton", "$@33", "assoc_list", "assocs", - "label_tag", "assoc", "operation", "operation2", "operation3", - "dot_or_colon", "call_op", "call_op2", "opt_terms", "opt_nl", "rparen", - "trailer", "term", "nl", "terms", "none", YY_NULLPTR + "f_opt_arglist_paren", "f_arglist_paren", "f_arglist", "f_label", "f_kw", + "f_block_kw", "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest", + "args_tail", "opt_args_tail", "f_args", "f_bad_arg", "f_norm_arg", + "f_arg_item", "@32", "f_arg", "f_opt_asgn", "f_opt", "f_block_opt", + "f_block_optarg", "f_optarg", "restarg_mark", "f_rest_arg", + "blkarg_mark", "f_block_arg", "opt_f_block_arg", "singleton", "$@33", + "assoc_list", "assocs", "label_tag", "assoc", "operation", "operation2", + "operation3", "dot_or_colon", "call_op", "call_op2", "opt_terms", + "opt_nl", "rparen", "trailer", "term", "nl", "terms", "none", YY_NULLPTR }; #endif @@ -2155,12 +2170,12 @@ static const yytype_int16 yytoknum[] = }; # endif -#define YYPACT_NINF (-838) +#define YYPACT_NINF (-848) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-606) +#define YYTABLE_NINF (-608) #define yytable_value_is_error(Yyn) \ ((Yyn) == YYTABLE_NINF) @@ -2169,113 +2184,113 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -838, 156, 2722, -838, 7591, 9715, 10057, 5899, -838, 9361, - 9361, -838, -838, 9829, 7081, 5634, 7827, 7827, -838, -838, - 7827, 3379, 2971, -838, -838, -838, -838, 26, 7081, -838, - -19, -838, -838, -838, 6041, 2835, -838, -838, 6183, -838, - -838, -838, -838, -838, -838, -838, 190, 9479, 9479, 9479, - 9479, 117, 4893, 1476, 8299, 8653, 7363, -838, 6799, 1151, - 90, 933, 1163, 1181, -838, 164, 9597, 9479, -838, 1086, - -838, 1015, -838, 381, 1948, 1948, -838, -838, 154, 66, - -838, 72, 9943, -838, 116, 12219, 326, 510, 112, 107, - -838, 121, -838, -838, -838, -838, -838, -838, -838, -838, - -838, 47, 206, -838, 205, 119, -838, -838, -838, -838, - -838, 162, 162, 189, 106, 684, -838, 9361, 355, 5012, - 503, 1948, 1948, -838, 212, -838, 559, -838, -838, 119, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, 31, 100, - 145, 233, -838, -838, -838, -838, -838, -838, 237, 240, - 241, 242, -838, 245, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, 248, - 4071, 296, 381, 73, 275, 12343, 569, 201, 331, 351, - 73, 9361, 9361, 656, 374, -838, -838, 751, 415, 83, - 124, -838, -838, -838, -838, -838, -838, -838, -838, -838, - 6940, -838, -838, 300, -838, -838, -838, -838, -838, -838, - 1086, -838, 309, -838, 429, -838, -838, 1086, 3107, 9479, - 9479, 9479, 9479, -838, 12281, -838, -838, 325, 441, 325, - -838, -838, -838, 7945, -838, -838, -838, 7827, -838, -838, - -838, 5634, 9361, -838, -838, 371, 5131, -838, 780, 433, - 12405, 12405, 408, 7709, 4893, 392, 1086, 1015, 1086, 422, - -838, 7709, 1086, 410, 1534, 1534, -838, 12281, 428, 1534, - -838, 499, 10171, 437, 805, 843, 846, 2048, -838, -838, - -838, -838, 1206, -838, -838, -838, -838, -838, -838, 629, - 1244, -838, -838, 223, -838, 1079, -838, 1299, -838, 1320, - 483, 489, -838, -838, -838, -838, 5396, 9361, 9361, 9361, - 9361, 7709, 9361, 9361, 78, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, 2160, 465, 4071, - 9479, -838, 456, 544, 461, -838, 1086, -838, -838, -838, - 470, 9479, -838, 480, 575, 494, 609, -838, 542, 4071, - -838, -838, 8771, -838, 4893, 7477, 520, 8771, 9479, 9479, - 9479, 9479, 9479, 9479, 9479, 9479, 9479, 9479, 9479, 9479, - 9479, 9479, 619, 9479, 9479, 9479, 9479, 9479, 9479, 9479, - 9479, 9479, 9479, 9479, 9479, 10449, -838, 7827, -838, 10535, - -838, -838, 11739, -838, -838, -838, -838, 9597, 9597, -838, - 567, -838, 381, -838, 882, -838, -838, -838, -838, -838, - -838, 10621, 7827, 10707, 4071, 9361, -838, -838, -838, 669, - 676, 384, -838, 4217, 675, 9479, 10793, 7827, 10879, 9479, - 9479, 4509, 607, 607, 128, 10965, 7827, 11051, -838, 637, - -838, 5131, 429, -838, -838, 8889, 704, -838, 629, 9479, - 12343, 12343, 12343, 9479, 200, -838, 8063, -838, 9479, -838, - 8417, 5753, 579, 1086, 325, 325, -838, -838, 887, 584, - -838, -838, 7081, 4628, 596, 10793, 10879, 9479, 1015, 1086, - -838, -838, 5515, 581, 1015, -838, -838, 8535, -838, 1086, - 8653, -838, -838, -838, 882, 72, 10171, -838, 10171, 11137, - 7827, 11223, 1603, -838, -838, -838, 1327, 5131, 629, -838, - -838, -838, -838, -838, -838, -838, 9479, 9479, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, 1196, 1086, - 1086, 597, 9479, 728, 12343, 541, -838, -838, -838, 197, - -838, -838, 1603, -838, 12343, 1603, -838, -838, 1780, -838, - -838, 9479, 736, 226, 9479, -838, 11935, 325, -838, 1086, - 10171, 617, -838, -838, -838, 716, 643, 1675, -838, -838, - 998, 402, 2403, 2403, 2403, 2403, 1997, 1997, 12485, 12423, - 2403, 2403, 12405, 12405, 1386, 1386, -838, 433, 11873, 1997, - 1997, 1322, 1322, 1401, 570, 570, 433, 433, 433, 3515, - 6539, 3787, 6657, -838, 162, -838, 628, 325, 481, -838, - 485, -838, -838, 3243, -838, -838, 1330, 226, 226, -838, - 2516, -838, -838, -838, -838, -838, 1086, 9361, 4071, 739, - 469, -838, 162, 630, 162, 755, 887, 7222, -838, 9007, - 760, -838, 522, -838, 6301, 6420, 632, 421, 424, 760, - -838, -838, -838, -838, 19, 99, 634, 134, 135, 9361, - 7081, 641, 767, 12343, 94, -838, 629, 12343, 12343, 629, - 9479, 12281, -838, 325, 12343, -838, -838, -838, -838, 8181, - 8417, -838, -838, -838, 651, -838, -838, 207, 1015, 1086, - 1534, 520, -838, 739, 469, 652, 788, 800, 649, 88, - -838, 663, -838, 433, 433, -838, 1066, 1086, 668, -838, - -838, 2202, 2579, -838, 748, -838, 461, -838, -838, -838, - 677, 692, 697, -838, 703, 748, 697, 11811, -838, -838, - 1603, 4071, -838, -838, 12006, 9125, -838, -838, 10171, 7709, - 9597, 9479, 11309, 7827, 11395, 138, 9597, 9597, -838, 567, - 486, 8063, 9597, 9597, -838, 567, 107, 154, 4071, 5131, - 226, -838, 1086, 803, -838, -838, -838, -838, 11935, -838, - 754, -838, 4774, 835, -838, 9361, 836, -838, 9479, 9479, - 472, 9479, 9479, 842, 5277, 5277, 137, 607, -838, -838, - -838, 9243, 4363, 629, 12343, -838, 5753, 325, -838, -838, - -838, 273, 717, 715, 4071, 5131, -838, -838, -838, 721, - -838, 1410, 1086, 9479, -838, 1603, -838, 1780, -838, 1780, - -838, 1780, -838, -838, 9479, -838, 649, 649, 10285, -838, - 723, 461, 725, 10285, -838, 729, 730, -838, 858, 9479, - 12077, -838, -838, 12343, 3651, 3923, 734, 519, 537, 9479, - 9479, -838, -838, -838, -838, -838, 9597, -838, -838, -838, - -838, -838, -838, -838, 867, 750, 5131, 4071, -838, -838, - 10399, 73, -838, -838, 5277, -838, -838, 73, -838, 9479, - -838, 872, 879, -838, 12343, 416, -838, 8417, -838, 1656, - 884, 761, 1429, 1429, 1186, -838, 12343, 697, 764, 697, - 697, 12343, 776, 777, 852, 1009, 541, -838, -838, 1724, - -838, 1009, 1603, -838, 1780, -838, -838, 12148, 547, 12343, - 12343, -838, -838, -838, -838, 772, 898, 862, -838, 1042, - 843, 846, 4071, -838, 4217, -838, -838, 5277, -838, -838, - -838, -838, 267, -838, -838, -838, -838, 779, 779, 1429, - 787, -838, 1780, -838, -838, -838, -838, -838, -838, 11481, - -838, 461, 541, -838, -838, 789, 792, 795, -838, 797, - 795, -838, -838, 882, 11567, 7827, 11653, 676, 522, 926, - 1656, -838, 1429, 779, 1429, 697, 798, 799, -838, 1603, - -838, 1780, -838, 1780, -838, 1780, -838, -838, 739, 469, - 808, 85, 453, -838, -838, -838, -838, 779, -838, 795, - 804, 795, 795, 273, -838, 1780, -838, -838, -838, 795, - -838 + -848, 137, 2991, -848, 7860, 9984, 10326, 6168, -848, 9630, + 9630, -848, -848, 10098, 7350, 5903, 8096, 8096, -848, -848, + 8096, 3648, 3240, -848, -848, -848, -848, 97, 7350, -848, + 49, -848, -848, -848, 6310, 3104, -848, -848, 6452, -848, + -848, -848, -848, -848, -848, -848, 51, 9748, 9748, 9748, + 9748, 168, 5162, 891, 8568, 8922, 7632, -848, 7068, 1196, + 473, 810, 1387, 1396, -848, 273, 9866, 9748, -848, 1021, + -848, 1343, -848, 279, 1637, 1722, -848, -848, 130, 112, + -848, 121, 10212, -848, 152, 12292, 671, 677, 36, 82, + -848, 321, -848, -848, -848, -848, -848, -848, -848, -848, + -848, 46, 187, -848, 200, 71, -848, -848, -848, -848, + -848, 181, 181, 207, 689, 917, -848, 9630, 283, 5281, + 352, 1722, 1722, -848, 174, -848, 806, -848, -848, 71, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, 24, 103, + 146, 166, -848, -848, -848, -848, -848, -848, 179, 182, + 197, 225, -848, 228, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, 233, + 4340, 341, 279, 680, 277, 12416, 843, 52, 309, 76, + 680, 9630, 9630, 883, 348, -848, -848, 1109, 381, 98, + 107, -848, -848, -848, -848, -848, -848, -848, -848, -848, + 7209, -848, -848, 278, -848, -848, -848, -848, -848, -848, + 1021, -848, 338, -848, 402, -848, -848, 1021, 3376, 9748, + 9748, 9748, 9748, -848, 12354, -848, -848, 292, 379, 292, + -848, -848, -848, 8214, -848, -848, -848, 8096, -848, -848, + -848, 5903, 9630, -848, -848, 317, 5400, -848, 1118, 368, + 12478, 12478, 203, 7978, 5162, 343, 1021, 1343, 1021, 380, + -848, 7978, 1021, 359, 1352, 1352, -848, 12354, 364, 1352, + -848, 461, 10440, 383, 1158, 1213, 1216, 1732, -848, -848, + -848, -848, 1421, -848, -848, -848, -848, -848, -848, 518, + 1507, -848, -848, 499, -848, 880, -848, 1513, -848, 1528, + 430, 441, -848, -848, -848, -848, 5665, 9630, 9630, 9630, + 9630, 7978, 9630, 9630, 155, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, 1378, 431, 444, + 4340, 9748, -848, 409, 524, 446, -848, 1021, -848, -848, + -848, 475, 9748, -848, 480, 556, 481, 576, -848, -848, + 511, 4340, -848, -848, 9040, -848, 5162, 7746, 492, 9040, + 9748, 9748, 9748, 9748, 9748, 9748, 9748, 9748, 9748, 9748, + 9748, 9748, 9748, 9748, 588, 9748, 9748, 9748, 9748, 9748, + 9748, 9748, 9748, 9748, 9748, 9748, 9748, 1200, -848, 8096, + -848, 2511, -848, -848, 11750, -848, -848, -848, -848, 9866, + 9866, -848, 542, -848, 279, -848, 1218, -848, -848, -848, + -848, -848, -848, 2629, 8096, 10718, 4340, 9630, -848, -848, + -848, 627, 630, 218, -848, 4486, 629, 9748, 10804, 8096, + 10890, 9748, 9748, 4778, 106, 106, 122, 10976, 8096, 11062, + -848, 583, -848, 5400, 402, -848, -848, 9158, 645, -848, + 518, 9748, 12416, 12416, 12416, 9748, 374, -848, 8332, -848, + 9748, -848, 8686, 6022, 520, 1021, 292, 292, -848, -848, + 1016, 526, -848, -848, 7350, 4897, 534, 10804, 10890, 9748, + 1343, 1021, -848, -848, 5784, 541, 1343, -848, -848, 8804, + -848, 1021, 8922, -848, -848, -848, 1218, 121, 10440, -848, + 10440, 11148, 8096, 11234, 2150, -848, -848, -848, 1539, 5400, + 518, -848, -848, -848, -848, -848, -848, -848, 9748, 9748, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + 1672, 1021, 1021, 545, 9748, 661, 12416, 78, -848, -848, + -848, 47, -848, -848, 2150, -848, 12416, 2150, -848, -848, + 1545, -848, -848, 9748, 673, 38, 9748, -848, 12008, 292, + -848, 1021, 10440, 549, -848, -848, -848, 648, 572, 1998, + -848, -848, 1267, 219, 2194, 2194, 2194, 2194, 2128, 2128, + 2694, 2786, 2194, 2194, 12478, 12478, 465, 465, -848, 368, + 11946, 2128, 2128, 1923, 1923, 1531, 674, 674, 368, 368, + 368, 3784, 6808, 4056, 6926, -848, 181, -848, 554, 292, + 258, -848, 507, -848, -848, 3512, -848, -848, 2370, 38, + 38, -848, 2848, -848, -848, -848, -848, -848, 1021, 9630, + 4340, 1033, 515, -848, 181, 557, 181, 685, 1016, 7491, + -848, 9276, 683, -848, 425, -848, 6570, 6689, 563, 295, + 296, 683, -848, -848, -848, -848, 66, 115, 567, 126, + 128, 9630, 7350, 571, 706, 12416, 80, -848, 518, 12416, + 12416, 518, 9748, 12354, -848, 292, 12416, -848, -848, -848, + -848, 8450, 8686, -848, -848, -848, 585, -848, -848, 170, + 1343, 1021, 1352, 492, -848, 1033, 515, 586, 1058, 1092, + 581, 89, -848, 591, -848, 368, 368, -848, 1286, 1021, + 592, -848, -848, 1886, 11822, -848, 676, -848, 446, -848, + -848, -848, 593, 595, 596, -848, 612, 676, 596, 11884, + -848, -848, 2150, 4340, -848, -848, 12079, 9394, -848, -848, + 10440, 7978, 9866, 9748, 11320, 8096, 11406, 55, 9866, 9866, + -848, 542, 509, 8332, 9866, 9866, -848, 542, 82, 130, + 4340, 5400, 38, -848, 1021, 740, -848, -848, -848, -848, + 12008, -848, 665, -848, 5043, 745, -848, 9630, 750, -848, + 9748, 9748, 298, 9748, 9748, 753, 5546, 5546, 140, 106, + -848, -848, -848, 9512, 4632, 518, 12416, -848, 6022, 292, + -848, -848, -848, 1095, 615, 625, 4340, 5400, -848, -848, + -848, 631, -848, 1803, 1021, 9748, -848, 2150, -848, 1545, + -848, 1545, -848, 1545, -848, -848, 9748, -848, 581, 581, + 10554, -848, 635, 446, 638, 10554, -848, 643, 649, -848, + 757, 9748, 12150, -848, -848, 12416, 3920, 4192, 651, 305, + 449, 9748, 9748, -848, -848, -848, -848, -848, 9866, -848, + -848, -848, -848, -848, -848, -848, 789, 684, 5400, 4340, + -848, -848, 10668, 680, -848, -848, 5546, -848, -848, 680, + -848, 9748, -848, 797, 825, -848, 12416, 365, -848, 8686, + -848, 1320, 826, 710, 1836, 1836, 1295, -848, 12416, 596, + 704, 596, 596, 12416, 724, 727, 801, 1322, 78, -848, + -848, 1742, -848, 1322, 2150, -848, 1545, -848, -848, 12221, + 464, 12416, 12416, -848, -848, -848, -848, 718, 844, 805, + -848, 1335, 1213, 1216, 4340, -848, 4486, -848, -848, 5546, + -848, -848, -848, -848, 12, -848, -848, -848, -848, 721, + 721, 1836, 726, -848, 1545, -848, -848, -848, -848, -848, + -848, 11492, -848, 446, 78, -848, -848, 731, 735, 739, + -848, 742, 739, -848, -848, 1218, 11578, 8096, 11664, 630, + 425, 851, 1320, -848, 1836, 721, 1836, 596, 741, 744, + -848, 2150, -848, 1545, -848, 1545, -848, 1545, -848, -848, + 1033, 515, 748, 746, 804, -848, -848, -848, -848, 721, + -848, 739, 751, 739, 739, 1095, -848, 1545, -848, -848, + -848, 739, -848 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -2284,18 +2299,18 @@ static const yytype_int16 yypact[] = static const yytype_int16 yydefact[] = { 2, 0, 0, 1, 0, 0, 0, 0, 289, 0, - 0, 313, 316, 0, 0, 591, 333, 334, 335, 336, - 301, 266, 266, 484, 483, 485, 486, 593, 0, 10, - 0, 488, 487, 489, 475, 577, 477, 476, 479, 478, + 0, 313, 316, 0, 0, 593, 333, 334, 335, 336, + 301, 266, 266, 484, 483, 485, 486, 595, 0, 10, + 0, 488, 487, 489, 475, 579, 477, 476, 479, 478, 471, 472, 433, 434, 490, 491, 287, 0, 0, 0, - 0, 0, 0, 291, 605, 605, 84, 308, 0, 0, - 0, 0, 0, 0, 448, 0, 0, 0, 3, 591, - 6, 9, 27, 33, 533, 533, 45, 56, 55, 0, + 0, 0, 0, 291, 607, 607, 84, 308, 0, 0, + 0, 0, 0, 0, 448, 0, 0, 0, 3, 593, + 6, 9, 27, 33, 535, 535, 45, 56, 55, 0, 72, 0, 76, 86, 0, 50, 244, 0, 57, 306, 280, 281, 431, 282, 283, 284, 429, 428, 460, 430, 427, 482, 0, 285, 286, 266, 5, 8, 333, 334, - 301, 605, 409, 0, 109, 110, 287, 0, 0, 0, - 0, 533, 533, 112, 492, 337, 0, 482, 286, 0, + 301, 607, 409, 0, 109, 110, 287, 0, 0, 0, + 0, 535, 535, 112, 492, 337, 0, 482, 286, 0, 329, 164, 174, 165, 161, 190, 191, 192, 193, 172, 187, 180, 170, 169, 185, 168, 167, 163, 188, 162, 175, 179, 181, 173, 166, 182, 189, 184, 183, 176, @@ -2303,139 +2318,139 @@ static const yytype_int16 yydefact[] = 156, 114, 116, 115, 149, 150, 127, 128, 129, 136, 133, 135, 130, 131, 151, 152, 137, 138, 142, 145, 146, 132, 134, 124, 125, 126, 139, 140, 141, 143, - 144, 147, 148, 153, 563, 51, 117, 118, 562, 0, + 144, 147, 148, 153, 565, 51, 117, 118, 564, 0, 0, 0, 54, 0, 0, 50, 0, 482, 0, 286, 0, 0, 0, 108, 0, 348, 347, 0, 0, 482, 286, 183, 176, 186, 171, 154, 155, 156, 114, 115, - 0, 119, 121, 20, 120, 451, 456, 455, 599, 602, - 591, 601, 0, 453, 0, 603, 600, 592, 575, 0, - 0, 0, 0, 261, 273, 70, 265, 605, 431, 605, - 567, 71, 69, 605, 255, 302, 68, 0, 254, 408, - 67, 591, 0, 594, 18, 0, 0, 217, 0, 218, - 205, 208, 298, 0, 0, 0, 591, 15, 591, 74, - 14, 0, 591, 0, 596, 596, 245, 0, 0, 596, - 565, 0, 0, 82, 0, 92, 99, 533, 465, 464, + 0, 119, 121, 20, 120, 451, 456, 455, 601, 604, + 593, 603, 0, 453, 0, 605, 602, 594, 577, 0, + 0, 0, 0, 261, 273, 70, 265, 607, 431, 607, + 569, 71, 69, 607, 255, 302, 68, 0, 254, 408, + 67, 593, 0, 596, 18, 0, 0, 217, 0, 218, + 205, 208, 298, 0, 0, 0, 593, 15, 593, 74, + 14, 0, 593, 0, 598, 598, 245, 0, 0, 598, + 567, 0, 0, 82, 0, 92, 99, 535, 465, 464, 466, 467, 0, 463, 462, 435, 440, 439, 442, 0, 0, 437, 444, 0, 446, 0, 458, 0, 469, 0, - 473, 474, 49, 232, 233, 4, 592, 0, 0, 0, - 0, 0, 0, 0, 540, 536, 535, 534, 537, 538, - 542, 554, 509, 510, 558, 557, 553, 533, 498, 0, - 502, 507, 605, 512, 605, 532, 0, 539, 541, 544, - 518, 0, 551, 518, 556, 518, 0, 516, 498, 0, - 396, 398, 0, 88, 0, 80, 77, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 204, 207, + 473, 474, 49, 232, 233, 4, 594, 0, 0, 0, + 0, 0, 0, 0, 542, 538, 537, 536, 539, 540, + 544, 556, 511, 512, 560, 559, 555, 535, 0, 500, + 0, 504, 509, 607, 514, 607, 534, 0, 541, 543, + 546, 520, 0, 553, 520, 558, 520, 0, 518, 496, + 500, 0, 396, 398, 0, 88, 0, 80, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 588, 605, 587, 0, - 590, 589, 0, 413, 411, 307, 432, 0, 0, 402, - 61, 305, 326, 109, 110, 111, 473, 474, 498, 493, - 324, 0, 605, 0, 0, 0, 586, 585, 52, 0, - 605, 298, 339, 0, 338, 0, 0, 605, 0, 0, - 0, 0, 0, 0, 298, 0, 605, 0, 321, 0, - 122, 0, 0, 452, 454, 0, 0, 604, 569, 0, - 274, 574, 268, 0, 271, 262, 0, 270, 0, 263, - 0, 591, 0, 591, 605, 605, 256, 267, 591, 0, - 304, 48, 0, 0, 0, 0, 0, 0, 17, 591, - 296, 13, 592, 73, 292, 295, 299, 598, 246, 597, - 598, 248, 300, 566, 98, 90, 0, 85, 0, 0, - 605, 0, 533, 309, 393, 468, 0, 0, 443, 449, - 436, 438, 445, 447, 459, 470, 0, 0, 7, 21, - 22, 23, 24, 25, 46, 47, 500, 546, 0, 591, - 591, 518, 0, 0, 501, 0, 514, 561, 511, 0, - 515, 499, 0, 525, 547, 0, 528, 555, 0, 530, - 559, 0, 0, 605, 0, 28, 30, 0, 31, 591, - 0, 78, 89, 44, 34, 42, 0, 249, 194, 29, - 0, 286, 222, 227, 228, 229, 224, 226, 236, 237, - 230, 231, 203, 206, 234, 235, 32, 214, 593, 223, - 225, 219, 220, 221, 209, 210, 211, 212, 213, 578, - 583, 579, 584, 407, 266, 405, 0, 605, 578, 580, - 579, 581, 406, 266, 578, 579, 266, 605, 605, 35, - 249, 195, 41, 202, 59, 62, 0, 0, 0, 109, - 110, 113, 0, 0, 605, 0, 591, 0, 290, 605, - 605, 419, 605, 340, 582, 297, 0, 578, 579, 605, - 342, 314, 341, 317, 582, 297, 0, 578, 579, 0, - 0, 0, 0, 273, 0, 320, 570, 572, 571, 0, - 0, 275, 269, 605, 573, 568, 253, 251, 257, 258, - 260, 303, 595, 19, 0, 26, 201, 75, 16, 591, - 596, 91, 83, 95, 97, 0, 94, 96, 593, 0, - 461, 0, 450, 215, 216, 540, 356, 591, 349, 497, - 495, 0, 240, 331, 0, 508, 605, 560, 517, 545, - 518, 518, 518, 552, 518, 540, 518, 242, 332, 384, - 382, 0, 381, 380, 279, 0, 87, 81, 0, 0, - 0, 0, 0, 605, 0, 0, 0, 0, 404, 65, - 410, 258, 0, 0, 403, 63, 399, 58, 0, 0, - 605, 327, 0, 0, 410, 330, 564, 53, 420, 421, - 605, 422, 0, 605, 345, 0, 0, 343, 0, 0, - 410, 0, 0, 0, 0, 0, 410, 0, 123, 457, - 319, 0, 0, 272, 276, 264, 591, 605, 11, 293, - 247, 93, 0, 386, 0, 0, 310, 441, 357, 354, - 543, 0, 591, 0, 513, 0, 521, 0, 523, 0, - 529, 0, 526, 531, 0, 379, 593, 593, 504, 505, - 605, 605, 364, 0, 549, 364, 364, 362, 0, 0, - 277, 79, 43, 250, 578, 579, 0, 578, 579, 0, - 0, 40, 199, 39, 200, 66, 0, 37, 197, 38, - 198, 64, 400, 401, 0, 0, 0, 0, 494, 325, - 0, 0, 424, 346, 0, 12, 426, 0, 311, 0, - 312, 0, 0, 322, 275, 605, 252, 259, 392, 0, - 0, 0, 0, 0, 352, 496, 241, 518, 518, 518, - 518, 243, 0, 0, 0, 503, 0, 360, 361, 364, - 372, 548, 0, 375, 0, 377, 397, 278, 410, 239, - 238, 36, 196, 414, 412, 0, 0, 0, 423, 0, - 100, 107, 0, 425, 0, 315, 318, 0, 416, 417, - 415, 390, 593, 388, 391, 395, 394, 358, 355, 0, - 350, 522, 0, 519, 524, 527, 385, 383, 298, 0, - 506, 605, 0, 363, 370, 364, 364, 364, 550, 364, - 364, 60, 328, 106, 0, 605, 0, 605, 605, 0, - 0, 387, 0, 353, 0, 518, 582, 297, 359, 0, - 367, 0, 369, 0, 376, 0, 373, 378, 103, 105, - 0, 578, 579, 418, 344, 323, 389, 351, 520, 364, - 364, 364, 364, 101, 368, 0, 365, 371, 374, 364, - 366 + 204, 207, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 590, 607, + 589, 0, 592, 591, 0, 413, 411, 307, 432, 0, + 0, 402, 61, 305, 326, 109, 110, 111, 473, 474, + 500, 493, 324, 0, 607, 0, 0, 0, 588, 587, + 52, 0, 607, 298, 339, 0, 338, 0, 0, 607, + 0, 0, 0, 0, 0, 0, 298, 0, 607, 0, + 321, 0, 122, 0, 0, 452, 454, 0, 0, 606, + 571, 0, 274, 576, 268, 0, 271, 262, 0, 270, + 0, 263, 0, 593, 0, 593, 607, 607, 256, 267, + 593, 0, 304, 48, 0, 0, 0, 0, 0, 0, + 17, 593, 296, 13, 594, 73, 292, 295, 299, 600, + 246, 599, 600, 248, 300, 568, 98, 90, 0, 85, + 0, 0, 607, 0, 535, 309, 393, 468, 0, 0, + 443, 449, 436, 438, 445, 447, 459, 470, 0, 0, + 7, 21, 22, 23, 24, 25, 46, 47, 502, 548, + 0, 593, 593, 520, 0, 0, 503, 0, 516, 563, + 513, 0, 517, 501, 0, 527, 549, 0, 530, 557, + 0, 532, 561, 0, 0, 607, 0, 28, 30, 0, + 31, 593, 0, 78, 89, 44, 34, 42, 0, 249, + 194, 29, 0, 286, 222, 227, 228, 229, 224, 226, + 236, 237, 230, 231, 203, 206, 234, 235, 32, 214, + 595, 223, 225, 219, 220, 221, 209, 210, 211, 212, + 213, 580, 585, 581, 586, 407, 266, 405, 0, 607, + 580, 582, 581, 583, 406, 266, 580, 581, 266, 607, + 607, 35, 249, 195, 41, 202, 59, 62, 0, 0, + 0, 109, 110, 113, 0, 0, 607, 0, 593, 0, + 290, 607, 607, 419, 607, 340, 584, 297, 0, 580, + 581, 607, 342, 314, 341, 317, 584, 297, 0, 580, + 581, 0, 0, 0, 0, 273, 0, 320, 572, 574, + 573, 0, 0, 275, 269, 607, 575, 570, 253, 251, + 257, 258, 260, 303, 597, 19, 0, 26, 201, 75, + 16, 593, 598, 91, 83, 95, 97, 0, 94, 96, + 595, 0, 461, 0, 450, 215, 216, 542, 356, 593, + 349, 499, 497, 0, 240, 331, 0, 510, 607, 562, + 519, 547, 520, 520, 520, 554, 520, 542, 520, 242, + 332, 384, 382, 0, 381, 380, 279, 0, 87, 81, + 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, + 404, 65, 410, 258, 0, 0, 403, 63, 399, 58, + 0, 0, 607, 327, 0, 0, 410, 330, 566, 53, + 420, 421, 607, 422, 0, 607, 345, 0, 0, 343, + 0, 0, 410, 0, 0, 0, 0, 0, 410, 0, + 123, 457, 319, 0, 0, 272, 276, 264, 593, 607, + 11, 293, 247, 93, 0, 386, 0, 0, 310, 441, + 357, 354, 545, 0, 593, 0, 515, 0, 523, 0, + 525, 0, 531, 0, 528, 533, 0, 379, 595, 595, + 506, 507, 607, 607, 364, 0, 551, 364, 364, 362, + 0, 0, 277, 79, 43, 250, 580, 581, 0, 580, + 581, 0, 0, 40, 199, 39, 200, 66, 0, 37, + 197, 38, 198, 64, 400, 401, 0, 0, 0, 0, + 494, 325, 0, 0, 424, 346, 0, 12, 426, 0, + 311, 0, 312, 0, 0, 322, 275, 607, 252, 259, + 392, 0, 0, 0, 0, 0, 352, 498, 241, 520, + 520, 520, 520, 243, 0, 0, 0, 505, 0, 360, + 361, 364, 372, 550, 0, 375, 0, 377, 397, 278, + 410, 239, 238, 36, 196, 414, 412, 0, 0, 0, + 423, 0, 100, 107, 0, 425, 0, 315, 318, 0, + 416, 417, 415, 390, 595, 388, 391, 395, 394, 358, + 355, 0, 350, 524, 0, 521, 526, 529, 385, 383, + 298, 0, 508, 607, 0, 363, 370, 364, 364, 364, + 552, 364, 364, 60, 328, 106, 0, 607, 0, 607, + 607, 0, 0, 387, 0, 353, 0, 520, 584, 297, + 359, 0, 367, 0, 369, 0, 376, 0, 373, 378, + 103, 105, 0, 580, 581, 418, 344, 323, 389, 351, + 522, 364, 364, 364, 364, 101, 368, 0, 365, 371, + 374, 364, 366 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -838, -838, -838, 440, -838, 53, -838, -318, 202, -838, - 75, -838, -211, -338, 757, 82, 152, -838, -6, -30, - -838, -616, -838, 30, 941, -214, -3, -37, -221, -466, - -29, 1575, -53, 950, 9, -21, -838, -838, 15, -838, - 1144, -838, 347, 64, -252, -369, 96, 89, -838, -374, - -227, -119, 98, -371, 192, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, 8, -190, -458, -61, -611, -838, -838, -838, 199, - 282, -838, -561, -838, -838, -219, -838, -60, -838, -838, - 174, -838, -838, -838, -83, -838, -838, -474, -838, -58, - -838, -838, -838, -838, -838, -15, 43, -193, -838, -838, - -838, -838, -413, -268, -838, 722, -838, -838, -838, 40, - -838, -838, -838, 1599, 1788, 966, 1376, -838, -838, 578, - 259, 42, 401, 35, -838, -838, -838, 284, 7, -242, - -247, -837, -662, -218, -838, 270, -639, -551, -805, 28, - -541, -838, -519, -838, 271, -363, -838, -838, -838, 39, - 735, -468, 615, 647, -838, -838, -50, -838, 33, -7, - 582, -274, -90, -24, -36, -2 + -848, -848, -848, 382, -848, 28, -848, -255, 267, -848, + 120, -848, -31, -208, 229, 64, 100, -848, 83, -46, + -848, -605, -848, 30, 886, -183, -19, -66, -274, -472, + -45, 1894, -87, 898, 20, 14, -848, -848, 15, -848, + 1140, -848, 707, 65, -55, -403, 72, 26, -848, -298, + -233, 280, 375, -340, 129, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, 8, -216, -467, -115, -563, -848, -848, -848, 136, + 91, -848, -565, -848, -848, -424, -848, -110, -848, -848, + 114, -848, -848, -848, -86, -848, -848, -469, -848, -104, + -848, -848, -848, -848, -848, -15, 21, -178, -848, -848, + -848, -848, -405, -273, -848, 669, -848, -848, -848, 16, + -848, -848, -848, 1698, 2055, 921, 1364, -848, -848, -848, + 405, 74, -668, 354, -16, -848, -848, -848, 73, -20, + -195, -246, -815, -685, -526, -848, 135, -735, -520, -847, + -11, -505, -848, -439, -848, 262, -318, -848, -848, -848, + 45, 667, -422, 609, -265, -848, -848, -53, -848, 34, + -18, 366, -264, 601, -21, -62, -2 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 2, 68, 69, 70, 285, 459, 460, 296, - 297, 512, 72, 604, 73, 74, 75, 677, 213, 76, - 77, 665, 800, 78, 79, 298, 80, 81, 82, 537, - 83, 214, 123, 124, 241, 242, 243, 700, 642, 207, - 85, 303, 608, 643, 275, 502, 503, 276, 277, 266, - 495, 530, 647, 598, 86, 210, 301, 729, 302, 317, - 739, 221, 824, 222, 825, 699, 977, 668, 666, 907, - 454, 288, 463, 691, 816, 817, 228, 747, 932, 1003, - 950, 866, 771, 772, 867, 842, 982, 983, 543, 846, - 391, 593, 88, 89, 441, 658, 657, 486, 980, 680, - 810, 911, 915, 90, 91, 92, 330, 331, 547, 93, - 94, 95, 548, 251, 252, 253, 481, 96, 97, 98, - 324, 99, 100, 217, 218, 103, 219, 450, 667, 448, - 369, 370, 371, 869, 870, 372, 373, 374, 758, 583, - 376, 377, 378, 379, 568, 380, 381, 382, 874, 875, - 383, 384, 385, 386, 387, 576, 209, 455, 308, 505, - 489, 270, 129, 672, 645, 458, 453, 432, 509, 843, - 510, 528, 255, 256, 257, 300 + -1, 1, 2, 68, 69, 70, 285, 461, 462, 296, + 297, 514, 72, 606, 73, 74, 75, 679, 213, 76, + 77, 667, 802, 78, 79, 298, 80, 81, 82, 539, + 83, 214, 123, 124, 241, 242, 243, 702, 644, 207, + 85, 303, 610, 645, 275, 504, 505, 276, 277, 266, + 497, 532, 649, 600, 86, 210, 301, 731, 302, 317, + 741, 221, 826, 222, 827, 701, 979, 670, 668, 909, + 456, 288, 465, 693, 818, 819, 228, 749, 934, 1005, + 952, 868, 773, 774, 869, 844, 984, 985, 545, 848, + 393, 595, 88, 89, 443, 660, 659, 488, 982, 682, + 812, 913, 917, 90, 91, 92, 330, 331, 549, 93, + 94, 95, 550, 251, 252, 253, 483, 96, 97, 98, + 324, 99, 100, 217, 218, 103, 219, 452, 669, 368, + 450, 370, 371, 372, 871, 872, 373, 374, 375, 760, + 585, 377, 378, 379, 380, 570, 381, 382, 383, 876, + 877, 384, 385, 386, 387, 388, 578, 209, 457, 308, + 507, 491, 270, 129, 674, 647, 460, 455, 434, 511, + 845, 512, 530, 255, 256, 257, 300 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -2443,445 +2458,513 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 106, 268, 268, 283, 220, 268, 435, 284, 702, 250, - 87, 580, 87, 126, 126, 693, 205, 216, 216, 278, - 282, 227, 206, 216, 216, 216, 609, 313, 216, 206, - 471, 531, 715, 346, 763, 533, 342, 429, 431, 268, - 268, 760, 499, 206, -103, 396, 263, 263, 254, 299, - 263, 573, 306, 310, 244, 269, 269, 107, 646, 269, - 87, 549, 715, 761, 314, 445, 764, 323, 244, 813, - 544, 592, 732, 206, 216, 706, 436, 71, 823, 71, - 519, 375, 375, 673, 849, 274, 279, 121, 121, 462, - 314, 536, 984, 305, 309, 121, 798, 799, 686, 659, - 662, -102, 345, 333, 335, 337, 339, 696, -100, 278, - 462, 280, 265, 271, 267, 267, 272, 844, 267, 286, - 570, -484, 712, 464, -105, 216, 712, 87, 375, 375, - 464, 873, -575, 433, 777, 566, 675, 551, 121, -480, - 551, 586, 551, 589, 551, 433, 551, 1008, 496, -107, - 500, 332, 304, -106, 326, 327, 3, 122, 122, -102, - -104, -95, -101, -578, 121, 122, 468, 487, -100, 439, - 281, 735, 292, 895, 249, 274, 279, 477, -484, 901, - 599, 42, 390, 984, 43, 527, 603, 392, 245, -92, - -483, 246, 247, 439, 440, 889, -475, 125, 125, 567, - -102, 845, 430, -102, -102, 125, 328, 329, 122, 245, - 760, -475, 246, 247, 393, 472, 473, 426, 87, 248, - 549, 249, 340, 341, 1008, -92, 603, 603, 59, 216, - 216, -102, 761, -102, 122, -485, 494, 397, 516, 906, - 248, -97, 249, -579, -575, 434, -475, -483, 125, 323, - -575, 876, 715, -475, 295, 206, 487, 434, 268, 428, - 522, 890, 268, 273, 541, 497, -99, 497, 529, 529, - -98, 506, 990, 529, 125, 535, -94, -96, 499, -93, - 742, 216, -481, 482, 552, 216, 581, 326, 327, 216, - 216, 299, -485, -480, 87, 738, 833, 438, 437, -410, - 364, 87, 87, 263, 763, 769, 273, 263, 809, 87, - 873, -108, 881, 873, 978, -593, 269, 536, -593, -593, - 314, 295, -100, -486, 375, 365, -107, -488, -73, 521, - -487, -489, -475, 281, 389, -479, 938, 449, 456, 328, - 329, 559, 560, 561, 562, 712, 712, -99, 249, -87, - 803, 461, 770, 551, 87, 216, 216, 216, 216, 87, - 216, 216, 595, -410, 759, 546, 601, 605, 518, 923, - 577, 504, 577, 507, 375, 267, 524, 87, -410, 536, - -486, 389, 692, 692, -488, 719, 720, -487, -489, -475, - 873, 299, -479, 854, 121, 457, 465, 87, 671, 558, - 216, 794, 87, 314, 796, 610, 443, 605, 605, 1020, - 444, -410, 268, -410, 886, 249, -337, 712, 352, 353, - -410, 71, 794, 469, 483, 506, 563, 246, 247, 474, - 1006, -337, 487, 1009, 812, 216, 485, 268, 742, 487, - 478, 549, 480, 470, 651, 610, 610, 651, 891, 485, - 506, 979, 268, 878, 897, 899, 840, 263, 681, 715, - 216, 268, 87, 216, 122, 506, -337, 494, 651, -104, - 283, 87, -107, -337, 506, 216, 517, 121, 775, 87, - 904, 268, 263, 651, 216, 268, 835, 709, 514, 87, - 597, 723, 651, 652, 438, 597, 295, 263, 488, 731, - 517, 535, 497, 497, 125, -106, 263, 947, 948, 513, - 1050, 106, 268, 821, 832, 268, 822, 652, 856, 858, - 860, 87, 862, -107, 863, 268, 930, 206, 791, -106, - 87, 651, 652, 759, 413, 713, 718, 520, 506, 815, - 812, 652, -102, -72, 314, -104, 314, 122, 216, 375, - -98, 526, 244, 712, 534, 87, 651, 536, 961, -297, - 784, 446, 447, 535, 919, 742, 730, 532, -104, 603, - 263, -104, -104, 792, -297, 603, 801, 793, 896, 538, - 652, 603, 603, 704, 556, 831, 572, 125, 71, 966, - 557, 773, 754, -101, 500, 578, 295, 728, 575, -104, - 425, -104, -102, 579, 283, 652, -104, -101, 314, -297, - 835, 792, 582, -579, 464, 426, -297, 105, 121, 105, - 121, 785, 585, -94, 105, 105, 587, -96, -93, 793, - 105, 105, 105, 759, 690, 105, 588, 571, 1028, 896, - -102, 759, 362, 363, 364, 497, 1040, 942, 943, 451, - 427, 278, 368, 388, 278, 773, 773, 428, -104, 466, - 590, 802, 602, 591, 426, 682, 664, 105, -101, 365, - 626, 413, 278, 689, 426, 216, 87, 811, 814, 828, - 814, 105, 121, 701, 678, 603, 807, 814, 122, 679, - 122, 683, 206, 827, 529, 991, 993, 994, 995, 452, - 545, 422, 423, 424, 268, 268, 428, 216, 788, 467, - -576, 497, 908, 902, 283, 206, 428, 274, 927, 705, - 274, 972, 245, -87, 717, 246, 247, 974, 125, 722, - 125, 759, 105, 789, 105, 725, 788, 692, 274, 751, - 244, 535, 795, 753, 245, 797, -287, 246, 247, 741, - 605, 768, 122, 248, 577, 249, 605, 893, 837, 778, - 779, -287, 605, 605, 780, -582, 212, 212, 268, 790, - 805, 804, 212, 820, -479, 826, 268, 597, 812, 87, - 829, 506, 830, 1048, 661, 663, 314, 87, 610, -479, - 838, 216, 125, 841, 610, 216, -287, 249, 773, 651, - 610, 610, 847, -287, 759, 566, 87, 87, 912, 917, - 851, 916, 868, 263, -578, 759, 661, 663, 909, 855, - 87, 464, -576, 216, -479, 105, -579, 464, -576, -582, - 837, -479, 87, 87, 857, 497, 105, 105, 748, 859, - 87, 475, 283, 283, -582, 861, 757, 910, 652, 914, - 757, 918, 87, 87, 882, 762, 426, 920, 766, 756, - 121, 929, 928, 933, 726, 946, 605, 949, 577, 577, - 515, 952, 954, 956, 442, 958, 945, -582, -578, -582, - 523, 951, 963, -578, 525, 426, -582, 975, 105, 964, - -579, 476, 105, -578, 976, 539, 105, 105, 428, 985, - 986, 105, 996, 997, 610, -579, 992, 998, 105, 105, - 426, 1011, 268, 1012, 87, 87, 105, 1013, 969, 1016, - 467, 1022, 87, 814, 352, 353, -578, 428, -578, 1024, - 122, 1029, -578, -482, 1031, -578, -286, 1033, -579, 1035, - -579, 1045, -578, -579, -579, 540, 1055, -579, -482, 1053, - 121, -286, 428, 724, 225, 121, 130, 1044, 283, 1043, - 1046, 105, 105, 105, 105, 105, 105, 105, 105, 865, - 125, 903, -298, 208, 484, 1021, 755, 1005, 212, 212, - 87, 1000, 87, -482, 105, 87, -286, -298, 868, 0, - -482, 868, 121, -286, 868, 334, 868, 326, 327, 577, - 268, 905, 245, 498, 105, 246, 247, 105, 0, 105, - 0, 0, 105, 506, 913, 681, 814, 0, 0, 0, - 122, 0, -298, 216, 0, 122, 921, 922, 0, -298, - 0, 651, 0, 248, 925, 249, 0, 0, 508, 511, - 872, 877, 105, 0, 868, 263, 0, 931, 0, 328, - 329, 0, 105, 105, 871, 347, 348, 349, 350, 351, - 125, 0, 122, 0, 0, 125, 0, 105, 0, 105, - 105, 868, 644, 868, 0, 868, 653, 868, 105, 656, - 652, 0, 105, 716, 0, 0, 105, 0, 782, 0, - 721, 105, 0, 0, 0, 0, 105, 868, 0, 999, - 674, 727, 125, 426, 212, 212, 212, 212, 965, 564, - 565, 0, 0, 644, 426, 653, 973, 745, 0, 355, - 356, 357, 358, 0, 674, 937, 0, 939, 105, 0, - 0, 940, 1014, 892, 894, 359, 0, 105, 783, 898, - 900, 553, 0, 326, 327, 428, 0, 426, 0, 452, - 0, 749, 750, 215, 215, 105, 428, 953, 955, 215, - 264, 264, 105, 674, 264, 892, 894, 0, 898, 900, - 0, 0, 0, 0, 1017, 0, 1018, 0, 0, 1019, - 0, 776, 1015, 0, 0, 0, 0, 0, 674, 428, - 0, 287, 289, 290, 291, 328, 329, 0, 264, 307, - 0, 245, 987, 988, 246, 247, 0, 0, 848, 0, - 343, 344, 676, 0, 325, 326, 327, 757, 0, 0, - 877, 0, 1007, 877, 1010, 877, 336, 326, 327, 0, - 1001, 1004, 248, 871, 249, 0, 871, 745, 871, 355, - 356, 357, 358, 962, 338, 326, 327, 745, 0, 355, - 356, 357, 358, 0, 0, 359, 0, 0, 806, 1023, - 0, 215, 1025, 0, 0, 359, 962, 328, 329, 545, - 326, 327, 0, 877, 0, 0, 0, 0, 0, 328, - 329, 0, 105, 105, 0, 0, 871, 1030, 1032, 1034, - 360, 1036, 1037, 0, 1047, 0, 746, 328, 329, 1049, - 877, 1051, 877, 0, 877, 1052, 877, 550, 326, 327, - 0, 839, 0, 871, 105, 871, 0, 871, 0, 871, - 0, 0, 328, 329, 0, 1059, 877, 0, 989, 850, - -605, 1054, 1056, 1057, 1058, 0, 0, 0, 0, 871, - 0, 1060, 0, -605, -605, -605, -605, -605, -605, 0, - -605, 0, 0, 0, 0, 0, -605, -605, 0, 0, - 328, 329, 554, 326, 327, 215, 215, -605, -605, 0, - -605, -605, -605, -605, -605, 0, 0, 0, 104, 0, - 104, 128, 128, 555, 326, 327, 105, 0, 0, 230, - 740, 326, 327, 0, 105, 105, 0, 0, 105, 0, - 0, 105, 105, 490, 491, 492, 343, 105, 105, 0, - 410, 411, 0, 105, 105, 328, 329, 264, 926, 0, - -605, 264, 0, 413, 212, 215, 215, 105, 104, 644, - 105, 653, 316, 0, 935, -605, 328, 329, 0, 105, - 105, 0, 0, 328, 329, -605, 0, 105, -605, -605, - 419, 420, 421, 422, 423, 424, 212, 0, 316, 105, - 105, 745, 0, 355, 356, 357, 358, 0, -605, -605, - 0, 0, 0, 0, 273, -605, -605, -605, -605, 359, - 745, 0, 355, 356, 357, 358, 0, 413, 0, 410, - 411, 215, 215, 215, 215, 104, 215, 215, 359, 0, - 0, 0, 413, 0, 360, 0, 0, 0, 0, 0, - 934, 105, 0, 0, 574, 420, 421, 422, 423, 424, - 0, 105, 105, 360, 0, 584, 0, 0, 0, 105, - 420, 421, 422, 423, 424, 0, 596, 0, 0, 0, - 0, 607, 612, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 0, 627, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 0, - 0, 264, 212, 0, 0, 0, 0, 84, 0, 84, - 0, 660, 660, 0, 0, 0, 104, 105, 226, 105, - 0, -294, 105, 0, -294, -294, 264, 0, 0, 215, - 0, 101, 0, 101, 127, 127, 127, 0, 0, 660, - 0, 264, 229, 660, 660, 0, 0, 0, 0, 0, - 264, -294, -294, 0, -294, 0, 0, 84, 0, 703, - 105, 0, 0, 707, 0, 0, 0, 708, 0, 0, - 711, 0, 714, 0, 307, 291, 0, 0, 0, 245, - 0, 101, 246, 247, 354, 315, 355, 356, 357, 358, - 0, 660, 104, 674, 0, 0, 0, 0, 0, 104, - 104, 711, 359, 0, 307, 0, 494, 104, 0, 0, - 248, 315, 249, 0, 264, 0, 0, 0, 316, 0, - 0, 0, 0, 0, 84, 0, 0, 360, 0, 0, - 743, 744, 0, 361, 362, 363, 364, 981, 0, 355, - 356, 357, 358, 0, 0, 0, 752, 0, 101, 781, - 0, 0, 104, 0, 0, 359, 0, 104, 0, 0, - 0, 365, 0, 0, 366, 767, 0, 0, 774, 0, - 0, 0, 0, 0, 0, 104, 0, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 0, - 0, 0, 0, 410, 411, 104, 0, 0, 0, 0, - 104, 316, 0, 611, 0, 354, 413, 355, 356, 357, - 358, 0, 0, 0, 0, 84, 0, 0, 0, 0, - 102, 0, 102, 359, 0, 0, 0, 414, 0, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 101, - 0, 215, 0, 611, 611, 0, 0, -273, 360, 0, - 0, 0, 0, 808, 361, 362, 363, 364, 0, 0, - 104, 765, 0, 355, 356, 357, 358, 0, 0, 104, - 102, 0, 0, 215, 0, 0, 0, 104, 0, 359, - 0, 0, 365, 0, 834, 366, 0, 104, 0, 0, - 0, 84, 0, 711, 307, 0, 1002, 0, 84, 84, - 0, 0, 0, 0, 360, 0, 84, 0, 0, 0, - 0, 362, 363, 364, 0, 101, 0, 0, 0, 104, - 0, 0, 101, 101, 0, 0, 0, 0, 104, 0, - 101, 0, 0, 0, 0, 0, 0, 102, 365, 0, - 0, 315, 316, 0, 316, 0, 0, 0, 0, 880, - 0, 84, 0, 104, 660, 883, 84, 264, 0, 0, - 660, 660, 0, 0, 0, 711, 660, 660, 0, 0, - 0, 0, 0, 0, 84, 101, 0, 0, 0, 0, - 101, 0, 0, 0, 0, 0, 0, 0, 0, 215, - 0, 0, 660, 660, 84, 660, 660, 0, 101, 84, - 0, 0, 606, 0, 0, 924, 316, 0, 0, 0, - 291, 0, 0, 0, 0, 0, 0, 0, 101, 0, - 0, 0, 0, 101, 315, 0, 0, 936, 102, 354, - 0, 355, 356, 357, 358, 0, 0, 0, 941, 0, - 0, 0, 606, 606, 0, 0, 0, 359, 0, 0, - 0, 0, 0, 957, 0, 0, 0, 0, 0, 84, - 0, 0, 0, 959, 960, 0, 0, 0, 84, 0, - 660, 0, 360, 0, 104, 0, 84, 0, 361, 362, - 363, 364, 0, 101, 0, 0, 84, 0, 0, 0, - 0, 0, 101, 660, 0, 0, 0, 0, 0, 0, - 101, 307, 0, 0, 102, 0, 365, 0, 0, 366, - 101, 102, 102, 0, 0, 410, 411, 0, 84, 102, - 0, 0, 367, 0, 0, 0, 0, 84, 413, 354, - 0, 355, 356, 357, 358, 0, 0, 0, 0, 0, - 0, 0, 101, 0, 0, 0, 0, 359, 0, 0, - 0, 101, 84, 417, 418, 419, 420, 421, 422, 423, - 424, 0, 0, 0, 102, 315, 0, 315, 0, 102, - 0, 0, 360, 0, 0, 0, 101, 104, 361, 362, - 363, 364, 0, 0, 316, 104, 611, 102, 0, 264, - 0, 0, 611, 0, 0, 0, 0, 0, 611, 611, - 0, 0, 0, 0, 104, 104, 365, 102, 0, 366, - 0, 0, 102, 0, 0, 102, 0, 0, 104, 0, - 0, 0, 542, 0, 0, 0, 0, 0, 0, 315, - 104, 104, 0, 0, 0, 0, 0, 0, 104, 0, + 106, 268, 268, 437, 473, 268, 283, 346, 695, 282, + 87, 313, 87, 126, 126, 704, 398, 216, 216, 278, + 342, 227, 206, 216, 216, 216, 648, 205, 216, 206, + 244, 447, 107, 299, 431, 433, 501, 875, 538, 268, + 268, 533, 284, 206, 244, 535, 263, 263, 280, 254, + 263, 675, 306, 310, 376, 376, 551, 582, 761, 611, + 87, 269, 269, 851, 314, 269, 688, 765, 734, 121, + 121, 546, 389, 206, 216, 698, 438, 121, 323, 762, + 717, 333, 335, 337, 339, 708, 274, 279, 265, 271, + 314, -103, 272, 220, 800, 801, 464, 435, 250, 305, + 309, 376, 376, 345, 870, 122, 122, 1010, 435, 278, + 717, 521, 891, 122, -484, 575, 986, 771, 846, 815, + 121, 572, 71, -100, 71, 216, 432, 87, 825, 756, + 779, 442, -107, 692, 125, 125, 594, 3, -480, 737, + -105, 428, 125, -481, -480, 763, 121, -106, 766, 391, + 364, -102, 553, -104, 1022, 553, 122, 553, 392, 553, + 249, 553, 646, 470, 772, -101, 655, -100, 472, 658, + 441, -484, -108, -100, 479, 365, 274, 279, 892, 362, + 363, 364, 122, 430, 1010, 125, 897, 286, -92, 588, + 676, 591, 903, -483, 441, 245, 391, -107, 246, 247, + 714, 677, 847, 646, 714, 655, 365, 986, -95, 436, + -580, 125, 568, 601, 676, 273, 875, 551, 87, 875, + 436, 245, 496, 292, 246, 247, 248, 761, 249, 216, + 216, 661, 664, 394, 524, 518, -485, 908, 212, 212, + -92, 281, 531, 531, 212, 249, 537, 531, 762, -99, + -483, 992, 248, 676, 249, 206, -486, -97, 268, -581, + 323, 543, 268, 395, -98, 499, 538, 499, -94, -488, + -96, 508, -487, 399, 501, 299, 569, 744, 676, 439, + 870, 216, -93, 870, 484, 216, 870, -489, 870, 216, + 216, -73, 440, -485, 87, 519, 875, 376, 740, 451, + 717, 87, 87, 263, 474, 475, 835, 263, 883, 87, + 519, 440, -87, -486, 763, -475, 352, 353, -479, 295, + 314, -107, 269, 458, -106, 273, -488, 761, 538, -487, + 523, 340, 341, 878, 445, 761, 870, 765, 446, -106, + -107, 811, -99, 548, -489, -98, 444, 376, 597, 509, + 794, 281, 603, 607, 87, 216, 216, 216, 216, 87, + 216, 216, 925, 870, 980, 870, 673, 870, 605, 870, + 553, 579, -475, 579, 560, -479, 121, 299, 87, -102, + 459, 42, 888, 814, 43, 487, 295, 823, 824, 870, + 921, 267, 267, 607, 607, 267, 463, 794, 467, 87, + -94, 471, 216, 476, 87, 314, 480, 612, 605, 605, + 448, 449, 122, 520, 268, 805, -102, -104, 940, -101, + 482, 526, 487, 714, 714, 761, -102, 508, 59, 304, + 561, 562, 563, 564, 496, 744, 490, 216, 551, 268, + 856, 125, 817, 814, 944, 945, 653, 612, 612, 653, + 212, 212, 508, 485, 268, 515, 246, 247, 981, 263, + 683, 121, 216, 268, 87, 216, 71, 508, 842, 415, + 653, 565, 733, 87, 537, 283, 508, 216, 711, 369, + 390, 87, 837, 268, 263, 653, 216, 268, 522, -595, + 834, 87, -595, -595, 653, 714, 654, 122, 761, 263, + 528, -72, 573, 534, 499, 499, 538, 717, 263, 761, + 510, 513, 1008, 106, 268, 1011, 536, 268, 880, 646, + 654, 655, 249, 87, 376, 540, 125, 268, 725, 206, + 244, 558, 87, 653, 332, 654, 537, 326, 327, 720, + 508, 795, 559, 715, 654, 906, 314, 498, 314, 502, + 216, 577, 574, 516, 949, 950, 898, 87, 653, 786, + 554, 295, 744, 326, 327, -495, 415, 858, 860, 862, + -104, 864, 263, 865, 732, 580, 212, 212, 212, 212, + 893, 566, 567, 654, 529, -101, 899, 901, 581, 328, + 329, 932, 1052, 775, 422, 423, 424, 425, 426, 795, + 796, 898, 121, 798, 121, -297, 837, 589, 654, 283, + 314, 105, 787, 105, 1042, 328, 329, 584, 105, 105, + -297, 796, 587, 590, 105, 105, 105, 592, -104, 105, + -101, 714, 593, 245, 604, 71, 246, 247, 122, 628, + 122, 666, 680, 681, 730, 685, 547, 499, 506, -96, + 758, -93, 267, 278, 968, -297, 278, 775, 775, -581, + 707, 105, -297, 295, 525, 719, 121, 125, 527, 125, + 531, 724, 791, 727, 278, 105, 755, 216, 87, 813, + 816, 797, 816, -87, 799, 1030, 678, 753, 770, 816, + 963, 780, 781, 782, 206, 792, 464, 974, 806, 809, + 807, 814, 122, 976, 822, 750, 268, 268, 828, 216, + 831, 790, 904, 499, 537, -577, 830, 206, 244, 283, + 274, 832, 764, 274, 840, 768, 105, 843, 105, 249, + 849, 125, 684, 568, 853, 857, 607, 859, 861, 790, + 691, 274, 607, 895, 993, 995, 996, 997, 607, 607, + 703, 605, 804, 676, 863, 911, 579, 605, 912, 916, + 930, -337, -102, 605, 605, 920, 839, 427, 922, 599, + 268, 931, 958, 935, 599, 415, -337, 948, 268, -475, + 951, 87, 428, 508, 829, 954, 721, 722, 314, 87, + 612, 956, 960, 216, -475, 245, 612, 216, 246, 247, + 775, 653, 612, 612, 965, 424, 425, 426, 87, 87, + 914, -337, 977, 918, 466, 263, 743, 429, -337, 105, + -104, 466, 87, 966, 430, 216, 248, -577, 249, -475, + 105, 105, 1050, -577, 87, 87, -475, 499, 839, 759, + 978, 987, 87, 759, 121, 873, 994, 283, 283, 988, + 998, 654, 607, 999, 87, 87, 1000, 1013, 489, 1014, + 1015, -102, 706, 1024, -102, -102, 1047, 605, 1026, 718, + 579, 579, 334, 1031, 326, 327, 723, 1033, 947, 777, + 122, 1035, 105, 953, 1037, -580, 105, 729, -581, 1055, + 105, 105, -102, 1057, -102, 105, 453, 726, 212, 225, + 919, 884, 105, 105, 130, 1046, 612, 874, 867, 125, + 105, 428, 1048, 905, 268, 1045, 87, 87, 1018, -104, + 971, 486, -104, -104, 87, 816, 328, 329, 208, 793, + 212, 757, 1002, 468, 121, 500, 0, 751, 752, 121, + 1007, 0, 555, -578, 326, 327, 454, 489, 428, 0, + -104, 0, -104, 430, 0, 105, 105, 105, 105, 105, + 105, 105, 105, 283, 0, 0, 1023, 778, 955, 957, + 122, 0, 0, -287, 0, 122, 121, 0, 583, 105, + 0, 0, 87, 469, 87, 0, 833, 87, -287, 0, + 430, 0, 939, 0, 941, 502, 328, 329, 942, 125, + 105, 579, 268, 105, 125, 105, -294, -479, 105, -294, + -294, 0, 122, 0, 0, 508, 0, 683, 816, 0, + 0, 1003, -479, -287, 873, 216, 0, 873, 0, 873, + -287, 0, 0, 653, 879, 0, -294, -294, 105, -294, + 0, 125, 1006, 0, 808, 0, 212, 263, 105, 105, + 0, 0, 0, 352, 353, -578, 599, -479, 0, -584, + 0, -578, 0, 105, -479, 105, 105, 0, 907, 989, + 990, 0, 0, 0, 105, 694, 694, 873, 105, 0, + 0, 915, 105, 654, -580, 0, 0, 105, 0, 1009, + 0, 1012, 105, 923, 924, 0, 0, 841, 1032, 1034, + 1036, 927, 1038, 1039, 873, 0, 873, 0, 873, 0, + 873, 0, 0, 0, 933, 852, 0, 0, -581, 929, + 0, -410, 0, -584, 105, 489, 1025, 0, 0, 1027, + 873, 245, 489, 105, 246, 247, 245, 0, -584, 246, + 247, 0, 1056, 1058, 1059, 1060, 663, 665, -580, 215, + 215, 105, 1062, 0, 0, 215, 264, 264, 105, 0, + 264, 1049, 248, -580, 249, 0, 1051, 248, 1053, 249, + 0, -584, 1054, -584, 0, 967, 0, -580, 663, 665, + -584, 0, -581, 975, 0, -410, 0, 287, 289, 290, + 291, 0, 1061, 0, 264, 307, -580, -581, -580, 477, + -410, 0, -580, 0, 928, -580, 343, 344, 517, 0, + 759, 0, 0, 879, 428, 0, 879, 0, 879, 0, + 937, 0, 0, 428, 0, 0, 728, 0, 0, 0, + -581, 0, -581, -410, 0, -410, -581, 0, 0, -581, + 0, 1019, -410, 1020, 0, 0, 1021, 0, 541, 478, + 0, 641, 642, 0, 0, 643, 430, 215, 469, 325, + 326, 327, 0, 428, 0, 430, 879, 0, 0, 803, + 174, 175, 176, 177, 178, 179, 180, 181, 105, 105, + 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, + 0, 0, 0, 879, 0, 879, 0, 879, 542, 879, + 188, 189, 190, -482, 0, 430, -286, 466, -298, 0, + 105, 0, 328, 329, 0, 0, 0, 0, -482, 879, + 0, -286, 0, -298, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 0, 201, 202, 747, 0, 355, + 356, 357, 358, 203, 273, 0, 747, 0, 355, 356, + 357, 358, 0, -482, 0, 359, -286, 784, -298, 0, + -482, 215, 215, -286, 359, -298, 104, 0, 104, 128, + 128, 983, 428, 355, 356, 357, 358, 230, 0, 0, + 0, 0, 105, 347, 348, 349, 350, 351, 0, 359, + 105, 105, 0, 0, 105, 0, 0, 105, 105, 492, + 493, 494, 343, 105, 105, 910, 0, 785, 0, 105, + 105, 0, 1001, 264, 430, 0, 104, 264, 0, 0, + 316, 215, 215, 105, 0, 1016, 105, 428, 850, 354, + 694, 355, 356, 357, 358, 105, 105, 991, 0, 0, + 428, 0, 0, 105, 0, 0, 316, 359, 0, 0, + 336, 326, 327, 0, 0, 105, 105, 0, 0, 338, + 326, 327, 454, 571, 0, 0, 0, 245, 0, 430, + 246, 247, 360, 0, 0, 1017, 0, 0, 361, 362, + 363, 364, 430, 104, 547, 326, 327, 215, 215, 215, + 215, 0, 215, 215, 496, 894, 896, 0, 248, 0, + 249, 900, 902, 328, 329, 0, 365, 105, 0, 366, + 0, 576, 328, 329, 466, 0, 0, 105, 105, 0, + 466, 0, 586, 0, 0, 105, 0, 894, 896, 0, + 900, 902, 0, 0, 598, 0, 0, 328, 329, 609, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 629, 630, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 0, 0, 264, + 552, 326, 327, 0, 104, 0, 556, 326, 327, 662, + 662, 0, 0, 105, 0, 105, 0, 0, 105, 0, + 0, 557, 326, 327, 264, 0, 767, 215, 355, 356, + 357, 358, 742, 326, 327, 964, 0, 662, 0, 264, + 0, 662, 662, 0, 359, 0, 0, 0, 264, 412, + 413, 0, 0, 328, 329, 0, 105, 705, 964, 328, + 329, 709, 415, 0, 0, 710, 0, 0, 713, 360, + 716, 0, 307, 291, 328, 329, 362, 363, 364, 0, + 104, 0, 0, 0, 0, 328, 329, 104, 104, 662, + 422, 423, 424, 425, 426, 104, 0, 0, 0, 713, + 0, 0, 307, 365, 0, 0, 316, 0, 0, 0, + 0, 0, 264, 0, 0, 0, 0, 0, 354, 0, + 355, 356, 357, 358, 0, 0, 0, 0, 745, 746, + 101, 0, 101, 127, 127, 127, 359, 0, 0, 0, + 104, 229, 0, 0, 754, 104, 0, 0, 0, 0, + 0, 0, 0, 747, 0, 355, 356, 357, 358, 0, + 0, 360, 0, 769, 104, 0, 776, 361, 362, 363, + 364, 359, 0, 0, 0, 0, 0, 0, 0, 0, + 101, 0, 0, 0, 315, 104, 0, 0, -607, 0, + 104, 316, 0, 613, 0, 365, 360, 0, 366, 0, + 0, 0, 748, 354, 0, 355, 356, 357, 358, 0, + 315, 367, 0, 354, 0, 355, 356, 357, 358, 0, + 0, 359, 0, 354, 0, 355, 356, 357, 358, 0, + 0, 359, 0, 613, 613, 0, 0, 0, 0, 215, + 0, 359, 0, 0, 0, 0, 360, 101, 0, 0, + 104, 810, 361, 362, 363, 364, 360, 0, 0, 104, + 0, 0, 361, 362, 363, 364, 360, 104, 0, 0, + 0, 215, 361, 362, 363, 364, 0, 104, 0, 0, + 365, 0, 836, 366, 747, 0, 355, 356, 357, 358, + 365, 713, 307, 366, 0, 0, 367, 0, 0, 0, + 365, 0, 359, 366, 0, 0, 544, 0, 0, 104, + 0, 0, 0, 0, 1004, 0, 0, 747, 104, 355, + 356, 357, 358, 0, 0, 0, 84, 360, 84, 0, + 0, 0, 316, 936, 316, 359, 0, 226, 101, 0, + 0, 0, 0, 104, 0, 0, 0, 882, 0, 0, + 0, 0, 662, 885, 0, 264, 0, 0, 662, 662, + 360, 0, 0, 713, 662, 662, 0, 354, 0, 355, + 356, 357, 358, 0, 0, 0, 84, 0, 0, 0, + 0, 0, 0, 0, 0, 359, 0, 215, 0, 0, + 662, 662, 0, 662, 662, 0, 316, 0, 0, 0, + 0, 854, 0, 926, 0, 0, 0, 0, 291, 0, + 360, 0, 0, 0, 101, 0, 361, 362, 363, 364, + 0, 101, 101, 0, 0, 938, 0, 0, 0, 101, + 0, 0, 0, 0, 0, 0, 943, 0, 0, 0, + 315, 412, 413, 84, 365, 0, 0, 366, 0, 0, + 0, 959, 0, 0, 415, 0, 0, 0, 0, 0, + 0, 961, 962, 0, 104, 0, 0, 0, 662, 0, + 0, 0, 783, 0, 101, 0, 0, 0, 0, 101, + 0, 421, 422, 423, 424, 425, 426, 102, 0, 102, + 0, 662, 0, 0, 0, 0, 0, 0, 101, 307, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 0, 0, 0, 0, 412, 413, 0, 101, + 0, 0, 0, 0, 101, 315, 0, 0, 0, 415, + 0, 0, 0, 0, 84, 0, 0, 102, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 416, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 0, 0, 0, 0, 0, 104, 0, 0, + -273, 0, 0, 0, 316, 104, 613, 0, 0, 0, + 0, 0, 613, 0, 101, 0, 0, 264, 613, 613, + 0, 0, 0, 101, 104, 104, 0, 0, 0, 0, + 0, 101, 0, 0, 102, 0, 0, 0, 104, 0, + 84, 101, 0, 0, 0, 0, 0, 84, 84, 0, + 104, 104, 0, 0, 0, 84, 0, 0, 104, 0, 0, 354, 0, 355, 356, 357, 358, 0, 0, 0, - 104, 104, 0, 0, 0, 102, 102, 0, 0, 359, + 104, 104, 0, 101, 0, 0, 412, 413, 0, 359, + 0, 0, 101, 0, 0, 0, 0, 0, 0, 415, + 0, 0, 0, 0, 128, 0, 315, 0, 315, 128, + 84, 0, 0, 0, 360, 84, 0, 101, 0, 0, + 361, 362, 363, 364, 419, 420, 421, 422, 423, 424, + 425, 426, 613, 0, 84, 102, -608, -608, -608, -608, + 404, 405, 104, 104, -608, -608, 973, 0, 365, 0, + 104, 366, 412, 413, 0, 84, 0, 0, 0, 0, + 84, 0, 0, 608, 0, 415, 0, 0, 0, 0, + 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 0, 0, + 0, 0, 0, 608, 608, 0, 0, 0, 104, 0, + 104, 102, 0, 104, 0, 0, 0, 0, 102, 102, + 84, 0, 0, 0, 0, 0, 102, 0, 0, 84, + 0, 0, 0, 0, 0, 0, 0, 84, 101, 0, + -607, 0, 0, 0, 0, 0, 0, 84, 0, 0, + 0, 0, 0, -607, -607, -607, -607, -607, -607, 0, + -607, 0, 0, 0, 0, 0, -607, -607, 0, 0, + 0, 102, 0, 0, 0, 0, 102, -607, -607, 84, + -607, -607, -607, -607, -607, 0, 0, 0, 84, 0, + 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 84, 0, 0, 102, 0, 0, 0, + 0, 102, 0, 0, 102, 0, 0, 0, 0, 0, + -607, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 101, 0, 0, 0, -607, 0, 0, 315, 101, + 0, 0, 0, 0, 0, -607, 0, 0, -607, -607, + 0, 0, 0, 0, 102, 102, 0, 0, 101, 101, + 0, 0, 0, 0, 0, 0, 0, 0, -607, -607, + 0, 102, 101, 0, 273, -607, -607, -607, -607, 0, + 102, 0, 0, 0, 101, 101, 0, 0, 102, 0, + 0, 0, 101, 0, 0, 0, 0, 0, 102, 0, + 0, 0, 0, 0, 101, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 102, 84, 128, 569, 0, 0, 0, 128, - 0, 102, 0, 354, 360, 355, 356, 357, 358, 102, - 361, 362, 363, 364, 0, 0, 0, 101, 0, 102, - 0, 359, 611, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 104, 104, 0, 0, 971, 852, 365, 0, - 104, 366, 0, 0, 0, 0, 360, 0, 0, 0, - 0, 102, 361, 362, 363, 364, 0, 0, 0, 0, - 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 650, 651, 84, 0, 652, 0, 127, 0, + 102, 0, 0, 127, 0, 0, 0, 0, 0, 102, + 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, + 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, + 187, 0, 0, 0, 102, 0, 101, 101, 0, 0, + 972, 188, 189, 190, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 365, 0, 0, 366, 0, 102, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 84, 0, 104, 0, - 104, 0, 0, 104, 84, 606, 0, 0, 0, 0, - 0, 606, 0, 0, 0, 0, 0, 606, 606, 0, - 101, 0, 0, 84, 84, 0, 0, 315, 101, 0, + 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 0, 201, 202, 0, 0, + 0, 0, 0, 0, 203, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 101, 101, 84, - 84, 0, 0, 0, 0, 0, 0, 84, 0, 0, - 0, 101, 0, 0, 0, 0, 0, 0, 0, 84, - 84, 0, 0, 101, 101, 0, 0, 0, 0, 0, - 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 101, 101, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, - 0, 606, 127, 0, 0, -606, -606, -606, -606, 402, - 403, 84, 84, -606, -606, 968, 0, 0, 0, 84, - 0, 410, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 413, 101, 101, 0, 0, 970, - 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 84, 0, 84, - 0, 0, 84, 0, 0, 0, 0, 0, 0, 102, - 781, 0, 0, 0, 0, 0, 0, 102, 102, 0, - 0, 101, 0, 101, 102, 0, 101, 0, 0, 0, - 102, 102, 0, 0, 0, 0, 102, 102, 398, 399, + 0, 0, 101, 0, 101, 84, 608, 101, 0, 0, + 671, 642, 608, 0, 672, 0, 0, 0, 608, 608, + 0, 0, 0, 0, 84, 84, 0, 0, 0, 174, + 175, 176, 177, 178, 179, 180, 181, 0, 84, 182, + 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, + 84, 84, 0, 0, 0, 102, 0, 0, 84, 188, + 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, + 84, 84, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 0, 201, 202, 400, 401, 402, 403, + 404, 405, 203, 273, 408, 409, 0, 0, 0, 0, + 0, 0, 412, 413, 0, 0, 0, 0, 0, 0, + 0, 0, 608, 0, 0, 415, 0, 0, 0, 0, + 0, 0, 84, 84, 0, 0, 970, 0, 0, 0, + 84, 0, 0, 0, 0, 0, 0, 0, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 102, 0, + 0, 0, 0, 0, 0, 0, 102, 102, 0, 0, + 0, 0, 0, 102, 0, 0, 0, 0, 0, 102, + 102, 0, 0, 0, 0, 102, 102, 0, 400, 401, + 402, 403, 404, 405, 406, 0, 408, 409, 84, 102, + 84, 0, 0, 84, 412, 413, 0, 0, 0, 0, + 0, 102, 102, 0, 0, 0, 0, 415, 0, 102, + 0, 0, 783, 0, 0, 0, 0, 0, 0, 0, + 0, 102, 102, 0, 0, 0, 0, 0, 0, 0, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 102, 0, 0, 0, 410, 411, 0, 0, 0, 0, - 0, 0, 102, 102, 0, 0, 0, 413, 0, 0, - 102, 0, 0, 853, 0, 0, 0, 0, 0, 0, - 0, 0, 102, 102, 0, 0, 0, 0, 414, 0, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 0, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 0, 0, 0, 0, 410, 411, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 413, 0, 0, 0, 102, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 102, 102, 0, 0, 0, 0, - 0, 414, 102, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -605, 4, 0, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 0, 0, 0, 0, 0, - 0, 15, 0, 16, 17, 18, 19, 0, 0, 0, - 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, - 102, 27, 102, 0, 0, 102, 0, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, - 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, - 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, - 0, 0, 0, 51, 0, 0, 52, 53, 0, 54, - 55, 0, 56, 0, 0, 0, 57, 0, 58, 59, - 60, 0, 61, 62, 63, -288, 64, -605, 0, 0, - -605, -605, 0, 0, 0, 0, 0, 0, -288, -288, - -288, -288, -288, -288, 0, -288, 65, 66, 67, 0, - 0, 0, -288, -288, -288, 0, 0, 0, -605, 0, - -605, 0, -288, -288, 0, -288, -288, -288, -288, -288, + 410, 411, 0, 0, 0, 0, 412, 413, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, + 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 102, 102, 0, 0, 0, 0, 0, + 416, 102, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -607, 4, 0, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, + 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, + 0, 20, 21, 22, 23, 24, 25, 26, 0, 102, + 27, 102, 0, 0, 102, 0, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, + 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, + 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, + 0, 0, 51, 0, 0, 52, 53, 0, 54, 55, + 0, 56, 0, 0, 0, 57, 0, 58, 59, 60, + 0, 61, 62, 63, -288, 64, -607, 0, 0, -607, + -607, 0, 0, 0, 0, 0, 0, -288, -288, -288, + -288, -288, -288, 0, -288, 65, 66, 67, 0, 0, + 0, -288, -288, -288, 0, 0, 0, -607, 0, -607, + 0, -288, -288, 0, -288, -288, -288, -288, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -288, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -288, -288, -288, - -288, -288, -288, -288, -288, -288, -288, -288, -288, 0, - 0, 0, 0, -288, -288, -288, 0, 0, -288, 0, - 0, 0, 0, 0, -288, 0, -288, 0, 0, 0, - -288, 0, 0, 0, 0, 0, 0, 0, -288, 0, - -288, 0, 0, -288, -288, 0, 0, -288, -288, -288, - -288, -288, -288, -288, -288, -288, -288, -288, -288, 0, - 0, -409, 0, 0, -288, -288, -288, -288, 0, 0, - -288, -288, -288, -288, -409, -409, -409, -409, -409, -409, - 0, -409, 0, 0, 0, 0, 0, -409, -409, -409, - 0, 0, 0, 0, 0, 0, 0, 0, -409, -409, - 0, -409, -409, -409, -409, -409, 0, 0, 0, 0, + 0, -288, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, 0, 0, + 0, 0, -288, -288, -288, 0, 0, -288, 0, 0, + 0, 0, 0, -288, 0, -288, 0, 0, 0, -288, + 0, 0, 0, 0, 0, 0, 0, -288, 0, -288, + 0, 0, -288, -288, 0, 0, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, 0, 0, + -409, 0, 0, -288, -288, -288, -288, 0, 0, -288, + -288, -288, -288, -409, -409, -409, -409, -409, -409, 0, + -409, 0, 0, 0, 0, 0, -409, -409, -409, 0, + 0, 0, 0, 0, 0, 0, 0, -409, -409, 0, + -409, -409, -409, -409, -409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -409, -409, -409, -409, -409, -409, -409, - -409, -409, -409, -409, -409, 0, 0, 0, 0, -409, - -409, -409, 0, 0, -409, 0, 0, 0, 0, 0, - -409, 0, -409, 0, 0, 0, -409, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -409, 0, 0, -409, - -409, 0, 0, -409, 0, -409, -409, -409, -409, -409, - -409, -409, -409, -409, -409, 0, 0, -475, 0, -409, - -409, -409, -409, -409, 0, 273, -409, -409, -409, -409, - -475, -475, -475, -475, -475, -475, 0, -475, 0, 0, - 0, 0, 0, 0, -475, -475, 0, 0, 0, 0, - 0, 0, 0, 0, -475, -475, 0, -475, -475, -475, - -475, -475, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -475, + 0, 0, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, 0, 0, 0, 0, -409, -409, + -409, 0, 0, -409, 0, 0, 0, 0, 0, -409, + 0, -409, 0, 0, 0, -409, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -409, 0, 0, -409, -409, + 0, 0, -409, 0, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, 0, 0, -475, 0, -409, -409, + -409, -409, -409, 0, 273, -409, -409, -409, -409, -475, + -475, -475, -475, -475, -475, 0, -475, 0, 0, 0, + 0, 0, 0, -475, -475, 0, 0, 0, 0, 0, + 0, 0, 0, -475, -475, 0, -475, -475, -475, -475, + -475, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + 0, 0, 0, 0, -475, -475, -475, 0, -475, -475, + 0, 0, 0, 0, 0, -475, 0, -475, 0, 0, + 0, -475, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -475, 0, 0, -475, -475, 0, -475, -475, 0, -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, - -475, 0, 0, 0, 0, -475, -475, -475, 0, -475, - -475, 0, 0, 0, 0, 0, -475, 0, -475, 0, - 0, 0, -475, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -475, 0, 0, -475, -475, 0, -475, -475, - 0, -475, -475, -475, -475, -475, -475, -475, -475, -475, - -475, 0, 0, -605, 0, 0, -475, -475, -475, -475, - 0, 0, -475, -475, -475, -475, -605, -605, -605, -605, - -605, -605, 0, -605, 0, 0, 0, 0, 0, -605, - -605, -605, 0, 0, 0, 0, 0, 0, 0, 0, - -605, -605, 0, -605, -605, -605, -605, -605, 0, 0, + 0, 0, -607, 0, 0, -475, -475, -475, -475, 0, + 0, -475, -475, -475, -475, -607, -607, -607, -607, -607, + -607, 0, -607, 0, 0, 0, 0, 0, -607, -607, + -607, 0, 0, 0, 0, 0, 0, 0, 0, -607, + -607, 0, -607, -607, -607, -607, -607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -605, -605, -605, -605, -605, - -605, -605, -605, -605, -605, -605, -605, 0, 0, 0, - 0, -605, -605, -605, 0, 0, -605, 0, 0, 0, - 0, 0, -605, 0, -605, 0, 0, 0, -605, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -605, 0, - 0, -605, -605, 0, 0, -605, 0, -605, -605, -605, - -605, -605, -605, -605, -605, -605, -605, 0, 0, -605, - 0, -605, -605, -605, -605, -605, 0, 273, -605, -605, - -605, -605, -605, -605, -605, -605, -605, -605, 0, -605, - 0, 0, 0, 0, 0, 0, -605, -605, 0, 0, - 0, 0, 0, 0, 0, 0, -605, -605, 0, -605, - -605, -605, -605, -605, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, 0, 0, 0, 0, + -607, -607, -607, 0, 0, -607, 0, 0, 0, 0, + 0, -607, 0, -607, 0, 0, 0, -607, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -607, 0, 0, + -607, -607, 0, 0, -607, 0, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, 0, 0, -607, 0, + -607, -607, -607, -607, -607, 0, 273, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, 0, -607, 0, + 0, 0, 0, 0, 0, -607, -607, 0, 0, 0, + 0, 0, 0, 0, 0, -607, -607, 0, -607, -607, + -607, -607, -607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -605, -605, -605, -605, -605, -605, -605, -605, -605, - -605, -605, -605, 0, 0, 0, 0, -605, -605, -605, - 0, 0, -605, 0, 0, 0, 0, 0, -605, 0, - -605, 0, 0, 0, -605, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -605, 0, 0, -605, -605, 0, - 0, -605, 0, -605, -605, -605, -605, -605, -605, -605, - -605, -605, -605, 0, 0, -582, 0, 0, -605, -605, - -605, -605, 0, 273, -605, -605, -605, -605, -582, -582, - -582, 0, -582, -582, 0, -582, 0, 0, 0, 0, - 0, -582, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -582, -582, 0, -582, -582, -582, -582, -582, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, 0, 0, 0, 0, -607, -607, -607, 0, + 0, -607, 0, 0, 0, 0, 0, -607, 0, -607, + 0, 0, 0, -607, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -607, 0, 0, -607, -607, 0, 0, + -607, 0, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, 0, 0, -584, 0, 0, -607, -607, -607, + -607, 0, 273, -607, -607, -607, -607, -584, -584, -584, + 0, -584, -584, 0, -584, 0, 0, 0, 0, 0, + -584, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -584, -584, 0, -584, -584, -584, -584, -584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -582, -582, -582, - -582, -582, -582, -582, -582, -582, -582, -582, -582, 0, - 0, 0, 0, -582, -582, -582, 0, 786, -582, 0, - 0, 0, 0, 0, 0, 0, -582, 0, 0, 0, - -582, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -582, 0, 0, -582, -582, 0, -103, -582, 0, -582, - -582, -582, -582, -582, -582, -582, -582, -582, -582, 0, - 0, -582, 0, -582, -582, -582, 0, -95, 0, 0, - -582, -582, -582, -582, -582, -582, -582, 0, -582, -582, - 0, -582, 0, 0, 0, 0, 0, -582, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -582, -582, - 0, -582, -582, -582, -582, -582, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, 0, 0, + 0, 0, -584, -584, -584, 0, 788, -584, 0, 0, + 0, 0, 0, 0, 0, -584, 0, 0, 0, -584, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -584, + 0, 0, -584, -584, 0, -103, -584, 0, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, 0, 0, + -584, 0, -584, -584, -584, 0, -95, 0, 0, -584, + -584, -584, -584, -584, -584, -584, 0, -584, -584, 0, + -584, 0, 0, 0, 0, 0, -584, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -584, -584, 0, + -584, -584, -584, -584, -584, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -582, -582, -582, -582, -582, -582, -582, - -582, -582, -582, -582, -582, 0, 0, 0, 0, -582, - -582, -582, 0, 786, -582, 0, 0, 0, 0, 0, - 0, 0, -582, 0, 0, 0, -582, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -582, 0, 0, -582, - -582, 0, -103, -582, 0, -582, -582, -582, -582, -582, - -582, -582, -582, -582, -582, 0, 0, -297, 0, -582, - -582, -582, 0, -582, 0, 0, -582, -582, -582, -582, - -297, -297, -297, 0, -297, -297, 0, -297, 0, 0, + 0, 0, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, 0, 0, 0, 0, -584, -584, + -584, 0, 788, -584, 0, 0, 0, 0, 0, 0, + 0, -584, 0, 0, 0, -584, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -584, 0, 0, -584, -584, + 0, -103, -584, 0, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, 0, 0, -297, 0, -584, -584, + -584, 0, -584, 0, 0, -584, -584, -584, -584, -297, + -297, -297, 0, -297, -297, 0, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -297, -297, 0, -297, -297, -297, - -297, -297, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -297, -297, 0, -297, -297, -297, -297, + -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -297, + 0, 0, 0, 0, 0, 0, 0, 0, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + 0, 0, 0, 0, -297, -297, -297, 0, 789, -297, + 0, 0, 0, 0, 0, 0, 0, -297, 0, 0, + 0, -297, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -297, 0, 0, -297, -297, 0, -105, -297, 0, -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, - -297, 0, 0, 0, 0, -297, -297, -297, 0, 787, - -297, 0, 0, 0, 0, 0, 0, 0, -297, 0, - 0, 0, -297, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -297, 0, 0, -297, -297, 0, -105, -297, - 0, -297, -297, -297, -297, -297, -297, -297, -297, -297, - -297, 0, 0, -297, 0, 0, -297, -297, 0, -97, - 0, 0, -297, -297, -297, -297, -297, -297, -297, 0, - -297, -297, 0, -297, 0, 0, 0, 0, 0, 0, + 0, 0, -297, 0, 0, -297, -297, 0, -97, 0, + 0, -297, -297, -297, -297, -297, -297, -297, 0, -297, + -297, 0, -297, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -297, + -297, 0, -297, -297, -297, -297, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -297, -297, 0, -297, -297, -297, -297, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, 0, 0, 0, 0, + -297, -297, -297, 0, 789, -297, 0, 0, 0, 0, + 0, 0, 0, -297, 0, 0, 0, -297, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -297, 0, 0, + -297, -297, 0, -105, -297, 0, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, 0, 0, 0, 0, + 0, -297, -297, 0, -297, 0, 0, -297, -297, -297, + -297, 293, 0, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, -607, -607, -607, 0, 0, -607, 15, + 0, 16, 17, 18, 19, 0, 0, 0, 0, 0, + 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, + 0, 0, 0, 0, 0, 28, 0, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, + 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, + 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 50, 0, 0, 0, 0, + 0, 51, 0, 0, 52, 53, 0, 54, 55, 0, + 56, 0, 0, 0, 57, 0, 58, 59, 60, 0, + 61, 62, 63, 0, 64, -607, 0, 0, -607, -607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -297, -297, -297, -297, -297, - -297, -297, -297, -297, -297, -297, -297, 0, 0, 0, - 0, -297, -297, -297, 0, 787, -297, 0, 0, 0, - 0, 0, 0, 0, -297, 0, 0, 0, -297, 0, - 0, 0, 0, 0, 0, 0, 0, 0, -297, 0, - 0, -297, -297, 0, -105, -297, 0, -297, -297, -297, - -297, -297, -297, -297, -297, -297, -297, 0, 0, 0, - 0, 0, -297, -297, 0, -297, 0, 0, -297, -297, - -297, -297, 293, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, -605, -605, -605, 0, 0, -605, - 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, - 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, - 27, 0, 0, 0, 0, 0, 28, 0, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, - 0, 0, 51, 0, 0, 52, 53, 0, 54, 55, - 0, 56, 0, 0, 0, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, -605, 0, 0, -605, - -605, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -605, 293, -605, + 0, 0, 0, 0, 65, 66, 67, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -607, 293, -607, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, + 0, -607, 0, -607, -607, 15, 0, 16, 17, 18, + 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, + 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, + 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, + 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 50, 0, 0, 0, 0, 0, 51, 0, 0, + 52, 53, 0, 54, 55, 0, 56, 0, 0, 0, + 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, + 64, -607, 0, 0, -607, -607, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 65, 66, 67, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -607, 293, -607, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 0, 0, -607, 0, 0, + -607, 15, -607, 16, 17, 18, 19, 0, 0, 0, + 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, + 0, 27, 0, 0, 0, 0, 0, 28, 0, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, + 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, + 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, + 0, 0, 0, 51, 0, 0, 52, 53, 0, 54, + 55, 0, 56, 0, 0, 0, 57, 0, 58, 59, + 60, 0, 61, 62, 63, 0, 64, -607, 0, 0, + -607, -607, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 65, 66, 67, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -607, 293, + -607, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 0, 0, -607, 0, 0, -607, 15, 0, 16, + 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, + 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, + 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, + 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 49, 50, 0, 0, 0, 0, 0, 51, + 0, 0, 52, 53, 0, 54, 55, 0, 56, 0, + 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, + 63, 0, 64, -607, 0, 0, -607, -607, 4, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 0, 0, -605, 0, -605, -605, 15, 0, 16, 17, - 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, + 0, 0, 65, 66, 67, 0, 15, 0, 16, 17, + 18, 19, 0, 0, -607, 0, -607, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, - 0, 0, 28, 0, 30, 31, 32, 33, 34, 35, + 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, 51, 0, 0, 52, 53, 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, -605, 0, 0, -605, -605, 0, 0, 0, + 0, 64, -607, 0, 0, -607, -607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 65, 66, 67, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -605, 293, -605, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 0, 0, -605, 0, - 0, -605, 15, -605, 16, 17, 18, 19, 0, 0, + 0, 65, 66, 67, 0, 0, -607, 0, 0, 0, + 0, 0, 0, -607, 293, -607, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 0, -607, -607, 0, + 0, 0, 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -2890,76 +2973,23 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, 51, 0, 0, 52, 53, 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, -605, 0, - 0, -605, -605, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, -605, - 293, -605, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 0, 0, -605, 0, 0, -605, 15, 0, - 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, - 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, - 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, - 51, 0, 0, 52, 53, 0, 54, 55, 0, 56, - 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, -605, 0, 0, -605, -605, 4, - 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 0, 0, 65, 66, 67, 0, 15, 0, 16, - 17, 18, 19, 0, 0, -605, 0, -605, 20, 21, - 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, - 0, 0, 0, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, - 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 49, 50, 0, 0, 0, 0, 0, 51, - 0, 0, 52, 53, 0, 54, 55, 0, 56, 0, - 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, - 63, 0, 64, -605, 0, 0, -605, -605, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 65, 66, 67, 0, 0, -605, 0, 0, - 0, 0, 0, 0, -605, 293, -605, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 0, -605, -605, - 0, 0, 0, 15, 0, 16, 17, 18, 19, 0, - 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, - 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, - 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, - 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 0, 0, 0, 0, 0, 51, 0, 0, 52, 53, - 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, - 58, 59, 60, 0, 61, 62, 63, 0, 64, -605, - 0, 0, -605, -605, 293, 0, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 0, 0, 65, 66, - 67, 0, 15, 0, 16, 17, 18, 19, 0, 0, - -605, 0, -605, 20, 21, 22, 23, 24, 25, 26, - 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, - 0, 0, 0, 0, 51, 0, 0, 294, 53, 0, - 54, 55, 0, 56, 0, 0, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, -605, 0, - 0, -605, -605, 293, 0, 5, 6, 7, 8, 9, + 59, 60, 0, 61, 62, 63, 0, 64, -607, 0, + 0, -607, -607, 293, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 65, 66, 67, - 0, 15, 0, 16, 17, 18, 19, 0, -605, -605, - 0, -605, 20, 21, 22, 23, 24, 25, 26, 0, + 0, 15, 0, 16, 17, 18, 19, 0, 0, -607, + 0, -607, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, - 0, 0, 0, 51, 0, 0, 52, 53, 0, 54, + 0, 0, 0, 51, 0, 0, 294, 53, 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, 58, 59, - 60, 0, 61, 62, 63, 0, 64, -605, 0, 0, - -605, -605, 293, 0, 5, 6, 7, 8, 9, 10, + 60, 0, 61, 62, 63, 0, 64, -607, 0, 0, + -607, -607, 293, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 65, 66, 67, 0, - 15, 0, 16, 17, 18, 19, 0, -605, -605, 0, - -605, 20, 21, 22, 23, 24, 25, 26, 0, 0, + 15, 0, 16, 17, 18, 19, 0, -607, -607, 0, + -607, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, @@ -2967,39 +2997,39 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, 51, 0, 0, 52, 53, 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, -605, 0, 0, -605, - -605, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, - -605, 0, 0, 0, 0, 0, 0, -605, 293, -605, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 0, 0, -605, 0, 0, 0, 15, 0, 16, 17, - 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, - 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, - 0, 0, 28, 0, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, + 0, 61, 62, 63, 0, 64, -607, 0, 0, -607, + -607, 293, 0, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 0, 0, 65, 66, 67, 0, 15, + 0, 16, 17, 18, 19, 0, -607, -607, 0, -607, + 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, + 0, 0, 0, 0, 0, 28, 0, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, + 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, + 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 50, 0, 0, 0, 0, + 0, 51, 0, 0, 52, 53, 0, 54, 55, 0, + 56, 0, 0, 0, 57, 0, 58, 59, 60, 0, + 61, 62, 63, 0, 64, -607, 0, 0, -607, -607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 50, 0, 0, 0, 0, 0, 51, 0, - 0, 52, 53, 0, 54, 55, 0, 56, 0, 0, - 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, -605, 0, 0, -605, -605, 0, 0, 5, + 0, 0, 0, 0, 65, 66, 67, 0, 0, -607, + 0, 0, 0, 0, 0, 0, -607, 293, -607, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, - 0, 65, 66, 67, 0, 15, 0, 16, 17, 18, - 19, 0, 0, -605, 0, -605, 20, 21, 22, 23, + 0, -607, 0, 0, 0, 15, 0, 16, 17, 18, + 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, - 0, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 0, 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, 51, 0, 0, 52, 53, 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, - 64, 245, 0, 0, 246, 247, 0, 0, 5, 6, + 64, -607, 0, 0, -607, -607, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 65, 66, 67, 0, 15, 0, 16, 17, 18, 19, - 0, 0, 248, 0, 249, 20, 21, 22, 23, 24, + 0, 0, -607, 0, -607, 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, - 28, 0, 30, 31, 32, 33, 34, 35, 36, 37, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, @@ -3007,22 +3037,22 @@ static const yytype_int16 yytable[] = 53, 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, 245, 0, 0, 246, 247, 0, 0, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 0, 0, 0, 65, + 8, 9, 10, 11, 12, 13, 14, 0, 0, 65, 66, 67, 0, 15, 0, 16, 17, 18, 19, 0, 0, 248, 0, 249, 20, 21, 22, 23, 24, 25, - 26, 0, 0, 27, 0, 0, 0, 0, 0, 0, - 0, 0, 31, 32, 33, 34, 35, 36, 37, 38, + 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, + 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 0, 0, 0, 0, 0, 211, 0, 0, 119, 53, - 0, 54, 55, 0, 0, 0, 0, 0, 57, 0, + 0, 0, 0, 0, 0, 51, 0, 0, 52, 53, + 0, 54, 55, 0, 56, 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, 245, 0, 0, 246, 247, 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, 65, 66, - 67, 0, 15, 0, 108, 109, 18, 19, 0, 0, - 248, 0, 249, 110, 111, 112, 23, 24, 25, 26, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, + 67, 0, 15, 0, 16, 17, 18, 19, 0, 0, + 248, 0, 249, 20, 21, 22, 23, 24, 25, 26, + 0, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, @@ -3030,100 +3060,126 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 211, 0, 0, 119, 53, 0, 54, 55, 0, 0, 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, 245, 0, - 0, 246, 247, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 65, 262, 67, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, - 0, 249, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 0, 0, 0, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 0, - 0, 0, 0, 0, 165, 166, 167, 168, 169, 170, - 171, 172, 36, 37, 173, 39, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, - 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, - 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 246, 247, 0, 0, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 0, 0, 0, 65, 66, 67, + 0, 15, 0, 108, 109, 18, 19, 0, 0, 248, + 0, 249, 110, 111, 112, 23, 24, 25, 26, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, + 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, + 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, + 0, 0, 0, 211, 0, 0, 119, 53, 0, 54, + 55, 0, 0, 0, 0, 0, 57, 0, 58, 59, + 60, 0, 61, 62, 63, 0, 64, 245, 0, 0, + 246, 247, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 65, 262, 67, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, + 249, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 0, 0, 0, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 0, 0, + 0, 0, 0, 165, 166, 167, 168, 169, 170, 171, + 172, 36, 37, 173, 39, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, + 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 0, 201, 202, 0, 0, 0, 0, - 0, 0, 203, 204, -575, -575, -575, -575, -575, -575, - -575, -575, -575, 0, 0, 0, 0, 0, 0, 0, - -575, 0, -575, -575, -575, -575, 0, -575, 0, 0, - 0, -575, -575, -575, -575, -575, -575, -575, 0, 0, - -575, 0, 0, 0, 0, 0, 0, 0, 0, -575, - -575, -575, -575, -575, -575, -575, -575, -575, 0, -575, - -575, -575, 0, 0, -575, 0, 0, -575, -575, 0, - -575, -575, -575, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -575, -575, 0, 0, 0, - 0, 0, -575, 0, 0, -575, -575, 0, -575, -575, - 0, -575, 0, -575, -575, -575, 0, -575, -575, -575, - 0, -575, -575, -575, 0, -575, 0, 0, 0, 0, + 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 0, 201, 202, 0, 0, 0, 0, 0, + 0, 203, 204, -577, -577, -577, -577, -577, -577, -577, + -577, -577, 0, 0, 0, 0, 0, 0, 0, -577, + 0, -577, -577, -577, -577, 0, -577, 0, 0, 0, + -577, -577, -577, -577, -577, -577, -577, 0, 0, -577, + 0, 0, 0, 0, 0, 0, 0, 0, -577, -577, + -577, -577, -577, -577, -577, -577, -577, 0, -577, -577, + -577, 0, 0, -577, 0, 0, -577, -577, 0, -577, + -577, -577, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -577, -577, 0, 0, 0, 0, + 0, -577, 0, 0, -577, -577, 0, -577, -577, 0, + -577, 0, -577, -577, -577, 0, -577, -577, -577, 0, + -577, -577, -577, 0, -577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -575, -575, -575, 0, -575, - 0, 0, 0, 0, 0, -575, -576, -576, -576, -576, - -576, -576, -576, -576, -576, 0, 0, 0, 0, 0, - 0, 0, -576, 0, -576, -576, -576, -576, 0, -576, - 0, 0, 0, -576, -576, -576, -576, -576, -576, -576, - 0, 0, -576, 0, 0, 0, 0, 0, 0, 0, - 0, -576, -576, -576, -576, -576, -576, -576, -576, -576, - 0, -576, -576, -576, 0, 0, -576, 0, 0, -576, - -576, 0, -576, -576, -576, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, -576, -576, 0, - 0, 0, 0, 0, -576, 0, 0, -576, -576, 0, - -576, -576, 0, -576, 0, -576, -576, -576, 0, -576, - -576, -576, 0, -576, -576, -576, 0, -576, 0, 0, - 0, 0, 0, 0, -578, -578, -578, -578, -578, -578, - -578, -578, -578, 0, 0, 0, 0, -576, -576, -576, - -578, -576, -578, -578, -578, -578, 0, -576, 0, 0, - 0, -578, -578, -578, -578, -578, -578, -578, 0, 0, - -578, 0, 0, 0, 0, 0, 0, 0, 0, -578, - -578, -578, -578, -578, -578, -578, -578, -578, 0, -578, - -578, -578, 0, 0, -578, 0, 0, -578, -578, 0, - -578, -578, -578, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -578, -578, 0, 0, 0, - 0, 0, -578, 818, 0, -578, -578, 0, -578, -578, - 0, -578, 0, -578, -578, -578, 0, -578, -578, -578, - 0, -578, -578, -578, 0, -578, 0, 0, 0, 0, - 0, 0, -103, -579, -579, -579, -579, -579, -579, -579, - -579, -579, 0, 0, 0, -578, -578, -578, 0, -579, - 0, -579, -579, -579, -579, -578, 0, 0, 0, 0, - -579, -579, -579, -579, -579, -579, -579, 0, 0, -579, - 0, 0, 0, 0, 0, 0, 0, 0, -579, -579, - -579, -579, -579, -579, -579, -579, -579, 0, -579, -579, - -579, 0, 0, -579, 0, 0, -579, -579, 0, -579, - -579, -579, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, -579, -579, 0, 0, 0, 0, - 0, -579, 819, 0, -579, -579, 0, -579, -579, 0, - -579, 0, -579, -579, -579, 0, -579, -579, -579, 0, - -579, -579, -579, 0, -579, 0, 0, 0, 0, 0, - 0, -105, -580, -580, -580, -580, -580, -580, -580, -580, - -580, 0, 0, 0, -579, -579, -579, 0, -580, 0, - -580, -580, -580, -580, -579, 0, 0, 0, 0, -580, - -580, -580, -580, -580, -580, -580, 0, 0, -580, 0, - 0, 0, 0, 0, 0, 0, 0, -580, -580, -580, - -580, -580, -580, -580, -580, -580, 0, -580, -580, -580, - 0, 0, -580, 0, 0, -580, -580, 0, -580, -580, - -580, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -580, -580, 0, 0, 0, 0, 0, - -580, 0, 0, -580, -580, 0, -580, -580, 0, -580, - 0, -580, -580, -580, 0, -580, -580, -580, 0, -580, - -580, -580, 0, -580, 0, 0, 0, 0, 0, 0, - -581, -581, -581, -581, -581, -581, -581, -581, -581, 0, - 0, 0, 0, -580, -580, -580, -581, 0, -581, -581, - -581, -581, 0, -580, 0, 0, 0, -581, -581, -581, - -581, -581, -581, -581, 0, 0, -581, 0, 0, 0, - 0, 0, 0, 0, 0, -581, -581, -581, -581, -581, - -581, -581, -581, -581, 0, -581, -581, -581, 0, 0, - -581, 0, 0, -581, -581, 0, -581, -581, -581, 0, + 0, 0, 0, 0, -577, -577, -577, 0, -577, 0, + 0, 0, 0, 0, -577, -578, -578, -578, -578, -578, + -578, -578, -578, -578, 0, 0, 0, 0, 0, 0, + 0, -578, 0, -578, -578, -578, -578, 0, -578, 0, + 0, 0, -578, -578, -578, -578, -578, -578, -578, 0, + 0, -578, 0, 0, 0, 0, 0, 0, 0, 0, + -578, -578, -578, -578, -578, -578, -578, -578, -578, 0, + -578, -578, -578, 0, 0, -578, 0, 0, -578, -578, + 0, -578, -578, -578, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -578, -578, 0, 0, + 0, 0, 0, -578, 0, 0, -578, -578, 0, -578, + -578, 0, -578, 0, -578, -578, -578, 0, -578, -578, + -578, 0, -578, -578, -578, 0, -578, 0, 0, 0, + 0, 0, 0, -580, -580, -580, -580, -580, -580, -580, + -580, -580, 0, 0, 0, 0, -578, -578, -578, -580, + -578, -580, -580, -580, -580, 0, -578, 0, 0, 0, + -580, -580, -580, -580, -580, -580, -580, 0, 0, -580, + 0, 0, 0, 0, 0, 0, 0, 0, -580, -580, + -580, -580, -580, -580, -580, -580, -580, 0, -580, -580, + -580, 0, 0, -580, 0, 0, -580, -580, 0, -580, + -580, -580, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -580, -580, 0, 0, 0, 0, + 0, -580, 820, 0, -580, -580, 0, -580, -580, 0, + -580, 0, -580, -580, -580, 0, -580, -580, -580, 0, + -580, -580, -580, 0, -580, 0, 0, 0, 0, 0, + 0, -103, -581, -581, -581, -581, -581, -581, -581, -581, + -581, 0, 0, 0, -580, -580, -580, 0, -581, 0, + -581, -581, -581, -581, -580, 0, 0, 0, 0, -581, + -581, -581, -581, -581, -581, -581, 0, 0, -581, 0, + 0, 0, 0, 0, 0, 0, 0, -581, -581, -581, + -581, -581, -581, -581, -581, -581, 0, -581, -581, -581, + 0, 0, -581, 0, 0, -581, -581, 0, -581, -581, + -581, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -581, -581, 0, 0, 0, 0, 0, + -581, 821, 0, -581, -581, 0, -581, -581, 0, -581, + 0, -581, -581, -581, 0, -581, -581, -581, 0, -581, + -581, -581, 0, -581, 0, 0, 0, 0, 0, 0, + -105, -582, -582, -582, -582, -582, -582, -582, -582, -582, + 0, 0, 0, -581, -581, -581, 0, -582, 0, -582, + -582, -582, -582, -581, 0, 0, 0, 0, -582, -582, + -582, -582, -582, -582, -582, 0, 0, -582, 0, 0, + 0, 0, 0, 0, 0, 0, -582, -582, -582, -582, + -582, -582, -582, -582, -582, 0, -582, -582, -582, 0, + 0, -582, 0, 0, -582, -582, 0, -582, -582, -582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -581, -581, 0, 0, 0, 0, 0, -581, 0, - 0, -581, -581, 0, -581, -581, 0, -581, 0, -581, - -581, -581, 0, -581, -581, -581, 0, -581, -581, -581, - 0, -581, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -582, -582, 0, 0, 0, 0, 0, -582, + 0, 0, -582, -582, 0, -582, -582, 0, -582, 0, + -582, -582, -582, 0, -582, -582, -582, 0, -582, -582, + -582, 0, -582, 0, 0, 0, 0, 0, 0, -583, + -583, -583, -583, -583, -583, -583, -583, -583, 0, 0, + 0, 0, -582, -582, -582, -583, 0, -583, -583, -583, + -583, 0, -582, 0, 0, 0, -583, -583, -583, -583, + -583, -583, -583, 0, 0, -583, 0, 0, 0, 0, + 0, 0, 0, 0, -583, -583, -583, -583, -583, -583, + -583, -583, -583, 0, -583, -583, -583, 0, 0, -583, + 0, 0, -583, -583, 0, -583, -583, -583, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, -581, -581, -581, 0, 0, 0, 0, 0, 0, - 0, -581, 131, 132, 133, 134, 135, 136, 137, 138, + -583, -583, 0, 0, 0, 0, 0, -583, 0, 0, + -583, -583, 0, -583, -583, 0, -583, 0, -583, -583, + -583, 0, -583, -583, -583, 0, -583, -583, -583, 0, + -583, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -583, -583, -583, 0, 0, 0, 0, 0, 0, 0, + -583, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 0, 0, 0, 155, 156, + 157, 231, 232, 233, 234, 162, 163, 164, 0, 0, + 0, 0, 0, 165, 166, 167, 235, 236, 237, 238, + 172, 318, 319, 239, 320, 0, 0, 0, 0, 0, + 0, 321, 0, 0, 0, 0, 0, 0, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, + 190, 0, 0, 0, 0, 322, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 0, 201, 202, 0, 0, 0, 0, 0, + 0, 203, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 0, 0, 0, 155, 156, 157, 231, 232, 233, 234, 162, 163, 164, 0, @@ -3133,7 +3189,7 @@ static const yytype_int16 yytable[] = 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 189, 190, 0, 0, 0, 0, 322, 0, 0, 0, + 189, 190, 0, 0, 0, 0, 481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 0, 201, 202, 0, 0, 0, 0, @@ -3142,12 +3198,12 @@ static const yytype_int16 yytable[] = 148, 149, 150, 151, 152, 153, 154, 0, 0, 0, 155, 156, 157, 231, 232, 233, 234, 162, 163, 164, 0, 0, 0, 0, 0, 165, 166, 167, 235, 236, - 237, 238, 172, 318, 319, 239, 320, 0, 0, 0, - 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, + 237, 238, 172, 0, 0, 239, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 188, 189, 190, 0, 0, 0, 0, 479, 0, 0, + 188, 189, 190, 0, 0, 0, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 0, 201, 202, 0, 0, 0, @@ -3161,981 +3217,1008 @@ static const yytype_int16 yytable[] = 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 188, 189, 190, 0, 0, 0, 240, 0, 0, + 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 0, 201, 202, 0, 0, - 0, 0, 0, 0, 203, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 0, - 0, 0, 155, 156, 157, 231, 232, 233, 234, 162, - 163, 164, 0, 0, 0, 0, 0, 165, 166, 167, - 235, 236, 237, 238, 172, 0, 0, 239, 0, 0, + 0, 0, 0, 0, 203, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 0, 0, 0, 0, 0, 0, + 0, 15, 0, 108, 109, 18, 19, 0, 0, 0, + 0, 0, 110, 111, 112, 23, 24, 25, 26, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, + 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 174, 175, 176, 177, 178, 179, 180, 181, - 0, 0, 182, 183, 0, 0, 0, 0, 184, 185, - 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, + 0, 0, 0, 311, 0, 0, 119, 53, 0, 54, + 55, 0, 0, 0, 0, 0, 57, 0, 58, 59, + 60, 0, 61, 62, 63, 0, 64, 0, 0, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, + 0, 0, 0, 0, 0, 15, 120, 108, 109, 18, + 19, 0, 0, 0, 312, 0, 110, 111, 112, 23, + 24, 25, 26, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, + 0, 0, 44, 45, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 0, 201, 202, 0, - 0, 0, 0, 0, 0, 203, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 108, 109, 18, 19, 0, 0, - 0, 0, 0, 110, 111, 112, 23, 24, 25, 26, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 116, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 311, 0, 0, + 119, 53, 0, 54, 55, 0, 0, 0, 0, 0, + 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, + 64, 0, 0, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 0, 0, 0, 0, 0, 0, 15, + 120, 16, 17, 18, 19, 0, 0, 0, 602, 0, + 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, + 0, 0, 0, 0, 0, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, + 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, + 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 50, 0, 0, 0, 0, + 0, 51, 0, 0, 52, 53, 0, 54, 55, 0, + 56, 0, 0, 0, 57, 0, 58, 59, 60, 0, + 61, 62, 63, 0, 64, 0, 0, 0, 0, 0, + 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 0, 0, 0, 65, 66, 67, 15, 0, 16, + 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, + 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, + 0, 0, 0, 28, 0, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, + 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 311, 0, 0, 119, 53, 0, - 54, 55, 0, 0, 0, 0, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 0, 0, 0, 15, 120, 108, 109, - 18, 19, 0, 0, 0, 312, 0, 110, 111, 112, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 116, 0, 0, 0, + 0, 0, 49, 50, 0, 0, 0, 0, 0, 51, + 0, 0, 52, 53, 0, 54, 55, 0, 56, 0, + 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, + 63, 0, 64, 0, 0, 0, 0, 0, 0, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, + 0, 0, 65, 66, 67, 15, 0, 16, 17, 18, + 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, + 24, 25, 26, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 32, 33, 258, 35, 36, + 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, + 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 311, 0, - 0, 119, 53, 0, 54, 55, 0, 0, 0, 0, - 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 0, 0, 0, 0, 0, 0, - 15, 120, 16, 17, 18, 19, 0, 0, 0, 600, - 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, - 27, 0, 0, 0, 0, 0, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, - 0, 0, 51, 0, 0, 52, 53, 0, 54, 55, - 0, 56, 0, 0, 0, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, 0, 0, 0, 0, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 0, 0, 0, 65, 66, 67, 15, 0, - 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, - 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, - 0, 0, 0, 0, 28, 0, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, - 51, 0, 0, 52, 53, 0, 54, 55, 0, 56, - 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 0, 0, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 65, 66, 67, 15, 0, 16, 17, - 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 258, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, + 49, 50, 0, 0, 0, 0, 0, 211, 0, 0, + 119, 53, 0, 54, 55, 0, 259, 0, 260, 261, + 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, + 64, 0, 0, 0, 0, 0, 0, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, + 65, 262, 67, 15, 0, 16, 17, 18, 19, 0, + 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, + 26, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 31, 32, 33, 258, 35, 36, 37, 38, + 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, + 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 49, 503, + 0, 0, 0, 0, 0, 211, 0, 0, 119, 53, + 0, 54, 55, 0, 259, 0, 260, 261, 57, 0, + 58, 59, 60, 0, 61, 62, 63, 0, 64, 0, + 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 0, 0, 0, 0, 65, 262, + 67, 15, 0, 108, 109, 18, 19, 0, 0, 0, + 0, 0, 110, 111, 112, 23, 24, 25, 26, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 32, 33, 258, 35, 36, 37, 38, 39, 0, + 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, + 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, + 0, 0, 0, 211, 0, 0, 119, 53, 0, 54, + 55, 0, 712, 0, 260, 261, 57, 0, 58, 59, + 60, 0, 61, 62, 63, 0, 64, 0, 0, 0, + 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 0, 0, 0, 0, 65, 262, 67, 15, + 0, 108, 109, 18, 19, 0, 0, 0, 0, 0, + 110, 111, 112, 23, 24, 25, 26, 0, 0, 113, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, + 33, 258, 35, 36, 37, 38, 39, 0, 40, 41, + 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, + 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 838, 0, 0, 0, 0, + 0, 211, 0, 0, 119, 53, 0, 54, 55, 0, + 712, 0, 260, 261, 57, 0, 58, 59, 60, 0, + 61, 62, 63, 0, 64, 0, 0, 0, 0, 0, + 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 0, 0, 0, 0, 65, 262, 67, 15, 0, 108, + 109, 18, 19, 0, 0, 0, 0, 0, 110, 111, + 112, 23, 24, 25, 26, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 31, 32, 33, 258, + 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, + 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 50, 0, 0, 0, 0, 0, 211, 0, - 0, 119, 53, 0, 54, 55, 0, 259, 0, 260, - 261, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 0, 0, 0, 0, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 0, 65, 262, 67, 15, 0, 16, 17, 18, 19, - 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, - 25, 26, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 32, 33, 258, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 501, 0, 0, 0, 0, 0, 211, 0, 0, 119, - 53, 0, 54, 55, 0, 259, 0, 260, 261, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 65, - 262, 67, 15, 0, 108, 109, 18, 19, 0, 0, - 0, 0, 0, 110, 111, 112, 23, 24, 25, 26, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 32, 33, 258, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, - 0, 0, 0, 0, 211, 0, 0, 119, 53, 0, - 54, 55, 0, 710, 0, 260, 261, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, 0, 0, - 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 0, 0, 0, 0, 65, 262, 67, - 15, 0, 108, 109, 18, 19, 0, 0, 0, 0, - 0, 110, 111, 112, 23, 24, 25, 26, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 32, 33, 258, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 836, 0, 0, 0, - 0, 0, 211, 0, 0, 119, 53, 0, 54, 55, - 0, 710, 0, 260, 261, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, 0, 0, 0, 0, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 65, 262, 67, 15, 0, - 108, 109, 18, 19, 0, 0, 0, 0, 0, 110, - 111, 112, 23, 24, 25, 26, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, - 258, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, - 211, 0, 0, 119, 53, 0, 54, 55, 0, 259, - 0, 260, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 0, 0, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 65, 262, 67, 15, 0, 108, 109, - 18, 19, 0, 0, 0, 0, 0, 110, 111, 112, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 258, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, + 0, 0, 49, 50, 0, 0, 0, 0, 0, 211, + 0, 0, 119, 53, 0, 54, 55, 0, 259, 0, + 260, 0, 57, 0, 58, 59, 60, 0, 61, 62, + 63, 0, 64, 0, 0, 0, 0, 0, 0, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, + 0, 0, 65, 262, 67, 15, 0, 108, 109, 18, + 19, 0, 0, 0, 0, 0, 110, 111, 112, 23, + 24, 25, 26, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 32, 33, 258, 35, 36, + 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, + 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 50, 0, 0, 0, 0, 0, 211, 0, - 0, 119, 53, 0, 54, 55, 0, 0, 0, 260, - 261, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 0, 0, 0, 0, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 0, 65, 262, 67, 15, 0, 108, 109, 18, 19, - 0, 0, 0, 0, 0, 110, 111, 112, 23, 24, - 25, 26, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 32, 33, 258, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 50, 0, 0, 0, 0, 0, 211, 0, 0, 119, - 53, 0, 54, 55, 0, 710, 0, 260, 0, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 65, - 262, 67, 15, 0, 108, 109, 18, 19, 0, 0, - 0, 0, 0, 110, 111, 112, 23, 24, 25, 26, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 32, 33, 258, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, - 0, 0, 0, 0, 211, 0, 0, 119, 53, 0, - 54, 55, 0, 0, 0, 260, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, 0, 0, - 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 0, 0, 0, 0, 65, 262, 67, - 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, - 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, - 0, 0, 211, 0, 0, 119, 53, 0, 54, 55, - 0, 594, 0, 0, 0, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, 0, 0, 0, 0, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 65, 262, 67, 15, 0, - 108, 109, 18, 19, 0, 0, 0, 0, 0, 110, - 111, 112, 23, 24, 25, 26, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, - 211, 0, 0, 119, 53, 0, 54, 55, 0, 259, - 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 0, 0, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 65, 262, 67, 15, 0, 108, 109, - 18, 19, 0, 0, 0, 0, 0, 110, 111, 112, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, + 49, 50, 0, 0, 0, 0, 0, 211, 0, 0, + 119, 53, 0, 54, 55, 0, 0, 0, 260, 261, + 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, + 64, 0, 0, 0, 0, 0, 0, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, + 65, 262, 67, 15, 0, 108, 109, 18, 19, 0, + 0, 0, 0, 0, 110, 111, 112, 23, 24, 25, + 26, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 31, 32, 33, 258, 35, 36, 37, 38, + 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, + 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, + 0, 0, 0, 0, 0, 211, 0, 0, 119, 53, + 0, 54, 55, 0, 712, 0, 260, 0, 57, 0, + 58, 59, 60, 0, 61, 62, 63, 0, 64, 0, + 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 0, 0, 0, 0, 65, 262, + 67, 15, 0, 108, 109, 18, 19, 0, 0, 0, + 0, 0, 110, 111, 112, 23, 24, 25, 26, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 32, 33, 258, 35, 36, 37, 38, 39, 0, + 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, + 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, + 0, 0, 0, 211, 0, 0, 119, 53, 0, 54, + 55, 0, 0, 0, 260, 0, 57, 0, 58, 59, + 60, 0, 61, 62, 63, 0, 64, 0, 0, 0, + 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 0, 0, 0, 0, 65, 262, 67, 15, + 0, 16, 17, 18, 19, 0, 0, 0, 0, 0, + 20, 21, 22, 23, 24, 25, 26, 0, 0, 113, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, + 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, + 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 50, 0, 0, 0, 0, + 0, 211, 0, 0, 119, 53, 0, 54, 55, 0, + 596, 0, 0, 0, 57, 0, 58, 59, 60, 0, + 61, 62, 63, 0, 64, 0, 0, 0, 0, 0, + 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 0, 0, 0, 0, 65, 262, 67, 15, 0, 108, + 109, 18, 19, 0, 0, 0, 0, 0, 110, 111, + 112, 23, 24, 25, 26, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, + 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 50, 0, 0, 0, 0, 0, 211, 0, - 0, 119, 53, 0, 54, 55, 0, 594, 0, 0, - 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 0, 0, 0, 0, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 0, 65, 262, 67, 15, 0, 108, 109, 18, 19, - 0, 0, 0, 0, 0, 110, 111, 112, 23, 24, - 25, 26, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, - 50, 0, 0, 0, 0, 0, 211, 0, 0, 119, - 53, 0, 54, 55, 0, 879, 0, 0, 0, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 65, - 262, 67, 15, 0, 108, 109, 18, 19, 0, 0, - 0, 0, 0, 110, 111, 112, 23, 24, 25, 26, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 50, 0, - 0, 0, 0, 0, 211, 0, 0, 119, 53, 0, - 54, 55, 0, 710, 0, 0, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, 0, 0, - 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 0, 0, 0, 0, 65, 262, 67, - 15, 0, 16, 17, 18, 19, 0, 0, 0, 0, - 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, - 27, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 0, 0, 0, - 0, 0, 211, 0, 0, 119, 53, 0, 54, 55, - 0, 0, 0, 0, 0, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, 0, 0, 0, 0, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 65, 66, 67, 15, 0, - 108, 109, 18, 19, 0, 0, 0, 0, 0, 110, - 111, 112, 23, 24, 25, 26, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 46, 47, - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 50, 0, 0, 0, 0, 0, - 211, 0, 0, 119, 53, 0, 54, 55, 0, 0, - 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 0, 0, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 65, 262, 67, 15, 0, 16, 17, - 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, + 0, 0, 49, 50, 0, 0, 0, 0, 0, 211, + 0, 0, 119, 53, 0, 54, 55, 0, 259, 0, + 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, + 63, 0, 64, 0, 0, 0, 0, 0, 0, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, + 0, 0, 65, 262, 67, 15, 0, 108, 109, 18, + 19, 0, 0, 0, 0, 0, 110, 111, 112, 23, + 24, 25, 26, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, + 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 50, 0, 0, 0, 0, 0, 211, 0, - 0, 119, 53, 0, 54, 55, 0, 0, 0, 0, - 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 0, 0, 0, 0, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 0, 65, 262, 67, 15, 0, 108, 109, 18, 19, - 0, 0, 0, 0, 0, 110, 111, 112, 23, 24, - 25, 26, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 32, 33, 114, 35, 36, 37, - 115, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 116, 0, 0, 0, 0, 0, + 49, 50, 0, 0, 0, 0, 0, 211, 0, 0, + 119, 53, 0, 54, 55, 0, 596, 0, 0, 0, + 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, + 64, 0, 0, 0, 0, 0, 0, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, + 65, 262, 67, 15, 0, 108, 109, 18, 19, 0, + 0, 0, 0, 0, 110, 111, 112, 23, 24, 25, + 26, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, + 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, + 0, 0, 0, 0, 0, 211, 0, 0, 119, 53, + 0, 54, 55, 0, 881, 0, 0, 0, 57, 0, + 58, 59, 60, 0, 61, 62, 63, 0, 64, 0, + 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 0, 0, 0, 0, 65, 262, + 67, 15, 0, 108, 109, 18, 19, 0, 0, 0, + 0, 0, 110, 111, 112, 23, 24, 25, 26, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, + 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, + 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 50, 0, 0, + 0, 0, 0, 211, 0, 0, 119, 53, 0, 54, + 55, 0, 712, 0, 0, 0, 57, 0, 58, 59, + 60, 0, 61, 62, 63, 0, 64, 0, 0, 0, + 0, 0, 0, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 0, 0, 0, 0, 65, 262, 67, 15, + 0, 16, 17, 18, 19, 0, 0, 0, 0, 0, + 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, + 42, 0, 0, 43, 0, 0, 44, 45, 0, 46, + 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 50, 0, 0, 0, 0, + 0, 211, 0, 0, 119, 53, 0, 54, 55, 0, + 0, 0, 0, 0, 57, 0, 58, 59, 60, 0, + 61, 62, 63, 0, 64, 0, 0, 0, 0, 0, + 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 0, 0, 0, 0, 65, 66, 67, 15, 0, 108, + 109, 18, 19, 0, 0, 0, 0, 0, 110, 111, + 112, 23, 24, 25, 26, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, + 0, 43, 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 117, 0, 0, 118, 0, 0, 119, - 53, 0, 54, 55, 0, 0, 0, 0, 0, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 0, 0, 0, 15, 120, - 108, 109, 18, 19, 0, 0, 0, 0, 0, 110, - 111, 112, 23, 24, 25, 26, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 223, 0, + 0, 0, 49, 50, 0, 0, 0, 0, 0, 211, + 0, 0, 119, 53, 0, 54, 55, 0, 0, 0, + 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, + 63, 0, 64, 0, 0, 0, 0, 0, 0, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, + 0, 0, 65, 262, 67, 15, 0, 16, 17, 18, + 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, + 24, 25, 26, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 0, 40, 41, 42, 0, 0, 43, + 0, 0, 44, 45, 0, 46, 47, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 50, 0, 0, 0, 0, 0, 211, 0, 0, + 119, 53, 0, 54, 55, 0, 0, 0, 0, 0, + 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, + 64, 0, 0, 0, 0, 0, 0, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, + 65, 262, 67, 15, 0, 108, 109, 18, 19, 0, + 0, 0, 0, 0, 110, 111, 112, 23, 24, 25, + 26, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 31, 32, 33, 114, 35, 36, 37, 115, + 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, + 44, 45, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 224, 0, 0, 52, 53, 0, 54, 55, 0, 56, - 0, 0, 0, 57, 0, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 0, 0, 0, 0, 0, - 0, 0, 15, 120, 108, 109, 18, 19, 0, 0, - 0, 0, 0, 110, 111, 112, 23, 24, 25, 26, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 0, 40, 41, 42, 0, 0, 43, 0, 0, 44, - 45, 0, 116, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 117, 0, 0, 118, 0, 0, 119, 53, + 0, 54, 55, 0, 0, 0, 0, 0, 57, 0, + 58, 59, 60, 0, 61, 62, 63, 0, 64, 0, + 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 0, 0, 0, 0, 0, 0, 0, 15, 120, 108, + 109, 18, 19, 0, 0, 0, 0, 0, 110, 111, + 112, 23, 24, 25, 26, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, + 0, 43, 0, 0, 44, 45, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 311, 0, 0, 394, 53, 0, - 54, 55, 0, 395, 0, 0, 0, 57, 0, 58, - 59, 60, 0, 61, 62, 63, 0, 64, 0, 0, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, - 0, 0, 0, 0, 0, 0, 15, 120, 108, 109, - 18, 19, 0, 0, 0, 0, 0, 110, 111, 112, - 23, 24, 25, 26, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 32, 33, 114, 35, - 36, 37, 115, 39, 0, 40, 41, 42, 0, 0, - 43, 0, 0, 44, 45, 0, 116, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, + 0, 0, 52, 53, 0, 54, 55, 0, 56, 0, + 0, 0, 57, 0, 58, 59, 60, 0, 61, 62, + 63, 0, 64, 0, 0, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 0, 0, 0, 0, 0, 0, + 0, 15, 120, 108, 109, 18, 19, 0, 0, 0, + 0, 0, 110, 111, 112, 23, 24, 25, 26, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, + 40, 41, 42, 0, 0, 43, 0, 0, 44, 45, + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, - 0, 119, 53, 0, 54, 55, 0, 0, 0, 0, - 0, 57, 0, 58, 59, 60, 0, 61, 62, 63, - 0, 64, 0, 0, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, - 15, 120, 108, 109, 18, 19, 0, 0, 0, 0, - 0, 110, 111, 112, 23, 24, 25, 26, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 0, 40, - 41, 42, 0, 0, 43, 0, 0, 44, 45, 0, - 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 311, 0, 0, 396, 53, 0, 54, + 55, 0, 397, 0, 0, 0, 57, 0, 58, 59, + 60, 0, 61, 62, 63, 0, 64, 0, 0, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, + 0, 0, 0, 0, 0, 15, 120, 108, 109, 18, + 19, 0, 0, 0, 0, 0, 110, 111, 112, 23, + 24, 25, 26, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 32, 33, 114, 35, 36, + 37, 115, 39, 0, 40, 41, 42, 0, 0, 43, + 0, 0, 44, 45, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 311, 0, 0, 394, 53, 0, 54, 55, - 0, 0, 0, 0, 0, 57, 0, 58, 59, 60, - 0, 61, 62, 63, 0, 64, 0, 0, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, - 0, 0, 0, 0, 15, 120, 108, 109, 18, 19, - 0, 0, 0, 0, 0, 110, 111, 112, 23, 24, - 25, 26, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 0, 40, 41, 42, 0, 0, 43, 0, - 0, 44, 45, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 118, 0, 0, + 119, 53, 0, 54, 55, 0, 0, 0, 0, 0, + 57, 0, 58, 59, 60, 0, 61, 62, 63, 0, + 64, 0, 0, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 0, 0, 0, 0, 0, 0, 0, 15, + 120, 108, 109, 18, 19, 0, 0, 0, 0, 0, + 110, 111, 112, 23, 24, 25, 26, 0, 0, 113, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 0, 40, 41, + 42, 0, 0, 43, 0, 0, 44, 45, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 944, 0, 0, 119, - 53, 0, 54, 55, 0, 0, 0, 0, 0, 57, - 0, 58, 59, 60, 0, 61, 62, 63, 0, 64, - 0, 0, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 0, 0, 0, 15, 120, - 108, 109, 18, 19, 0, 0, 0, 0, 0, 110, - 111, 112, 23, 24, 25, 26, 0, 0, 113, 0, - 0, 0, 0, 0, 0, 0, 0, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 0, 40, 41, 42, - 0, 0, 43, 0, 0, 44, 45, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 311, 0, 0, 396, 53, 0, 54, 55, 0, + 0, 0, 0, 0, 57, 0, 58, 59, 60, 0, + 61, 62, 63, 0, 64, 0, 0, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 0, 0, 0, 0, + 0, 0, 0, 15, 120, 108, 109, 18, 19, 0, + 0, 0, 0, 0, 110, 111, 112, 23, 24, 25, + 26, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 0, 40, 41, 42, 0, 0, 43, 0, 0, + 44, 45, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 967, 0, 0, 119, 53, 0, 54, 55, 0, 0, - 639, 640, 0, 57, 641, 58, 59, 60, 0, 61, - 62, 63, 0, 64, 0, 0, 0, 0, 0, 174, - 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, - 183, 0, 0, 120, 0, 184, 185, 186, 187, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 946, 0, 0, 119, 53, + 0, 54, 55, 0, 0, 0, 0, 0, 57, 0, + 58, 59, 60, 0, 61, 62, 63, 0, 64, 0, + 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 0, 0, 0, 0, 0, 0, 0, 15, 120, 108, + 109, 18, 19, 0, 0, 0, 0, 0, 110, 111, + 112, 23, 24, 25, 26, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 0, 40, 41, 42, 0, + 0, 43, 0, 0, 44, 45, 0, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 0, 201, 202, 648, 649, 0, 0, - 650, 0, 203, 273, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 174, 175, 176, 177, 178, - 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, - 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 969, + 0, 0, 119, 53, 0, 54, 55, 0, 0, 656, + 651, 0, 57, 657, 58, 59, 60, 0, 61, 62, + 63, 0, 64, 0, 0, 0, 0, 0, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 120, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, + 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 0, - 201, 202, 669, 640, 0, 0, 670, 0, 203, 273, + 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 0, 201, 202, 686, 642, 0, 0, 687, + 0, 203, 273, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 174, 175, 176, 177, 178, 179, + 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, + 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, - 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, - 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 0, 201, + 202, 689, 651, 0, 0, 690, 0, 203, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 0, 201, 202, 654, 649, - 0, 0, 655, 0, 203, 273, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 175, 176, - 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, - 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 188, 189, 190, + 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, + 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 0, 201, 202, 684, 640, 0, 0, 685, 0, - 203, 273, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 174, 175, 176, 177, 178, 179, 180, - 181, 0, 0, 182, 183, 0, 0, 0, 0, 184, - 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, + 0, 0, 0, 0, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 0, 201, 202, 696, 642, 0, + 0, 697, 0, 203, 273, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, + 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, + 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 0, 201, 202, - 687, 649, 0, 0, 688, 0, 203, 273, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, - 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, - 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 0, 201, 202, 694, 640, 0, 0, - 695, 0, 203, 273, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 174, 175, 176, 177, 178, - 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, - 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 0, 201, 202, 699, 651, 0, 0, 700, 0, 203, + 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 174, 175, 176, 177, 178, 179, 180, 181, + 0, 0, 182, 183, 0, 0, 0, 0, 184, 185, + 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 0, - 201, 202, 697, 649, 0, 0, 698, 0, 203, 273, + 0, 0, 0, 0, 0, 0, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 0, 201, 202, 735, + 642, 0, 0, 736, 0, 203, 273, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, + 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, - 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, - 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, + 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 0, 201, 202, 738, 651, 0, 0, 739, + 0, 203, 273, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 174, 175, 176, 177, 178, 179, + 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, + 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 0, 201, 202, 733, 640, - 0, 0, 734, 0, 203, 273, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 175, 176, - 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, - 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 188, 189, 190, + 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 0, 201, + 202, 886, 642, 0, 0, 887, 0, 203, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, + 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 0, 201, 202, 736, 649, 0, 0, 737, 0, - 203, 273, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 174, 175, 176, 177, 178, 179, 180, - 181, 0, 0, 182, 183, 0, 0, 0, 0, 184, - 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, + 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 0, 201, 202, - 884, 640, 0, 0, 885, 0, 203, 273, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, - 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, - 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 0, 201, 202, 889, 651, 0, + 0, 890, 0, 203, 273, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 174, 175, 176, 177, + 178, 179, 180, 181, 0, 0, 182, 183, 0, 0, + 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 0, 201, 202, 887, 649, 0, 0, - 888, 0, 203, 273, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 174, 175, 176, 177, 178, - 179, 180, 181, 0, 0, 182, 183, 0, 0, 0, - 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 0, - 201, 202, 1026, 640, 0, 0, 1027, 0, 203, 273, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 0, 201, 202, 1028, 642, 0, 0, 1029, 0, 203, + 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 174, 175, 176, 177, 178, 179, 180, 181, + 0, 0, 182, 183, 0, 0, 0, 0, 184, 185, + 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 174, 175, 176, 177, 178, 179, 180, 181, 0, - 0, 182, 183, 0, 0, 0, 0, 184, 185, 186, - 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 0, 201, 202, 1040, + 642, 0, 0, 1041, 0, 203, 273, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 174, 175, + 176, 177, 178, 179, 180, 181, 0, 0, 182, 183, + 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, + 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 0, 201, 202, 1038, 640, - 0, 0, 1039, 0, 203, 273, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 174, 175, 176, - 177, 178, 179, 180, 181, 0, 0, 182, 183, 0, - 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 188, 189, 190, + 0, 0, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 0, 201, 202, 1043, 651, 0, 0, 1044, + 0, 203, 273, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 174, 175, 176, 177, 178, 179, + 180, 181, 0, 0, 182, 183, 0, 0, 0, 0, + 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 0, 201, + 202, 656, 651, 0, 0, 657, 0, 203, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 0, 201, 202, 1041, 649, 0, 0, 1042, 0, - 203, 273, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 174, 175, 176, 177, 178, 179, 180, - 181, 0, 0, 182, 183, 0, 0, 0, 0, 184, - 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 188, 189, 190, 0, 0, 0, 0, + 174, 175, 176, 177, 178, 179, 180, 181, 0, 0, + 182, 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 0, 201, 202, - 654, 649, 0, 0, 655, 0, 203, 273, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 174, - 175, 176, 177, 178, 179, 180, 181, 0, 0, 182, - 183, 0, 0, 0, 0, 184, 185, 186, 187, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, - 189, 190, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 864, 0, 0, 0, 0, - 0, 0, 0, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 0, 201, 202, 0, 0, 0, 0, - 0, 0, 203, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 0, 0, 0, 0, 410, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, + 188, 189, 190, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 855, 0, 0, 0, + 0, 0, 0, 0, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 0, 201, 202, 0, 0, 0, + 0, 0, 0, 203, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 0, 0, 0, 0, + 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 415, 0, 0, 0, 0, 866, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 414, 0, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 0, 0, 0, - 0, 410, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 416, 0, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 0, 0, + 0, 0, 412, 413, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 414, 0, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 0, - 0, 249, 0, 410, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 416, 0, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 0, 0, 0, 0, 412, 413, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 414, 0, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 0, - 0, 0, 0, 0, 0, 0, 0, -273, 398, 399, + 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 0, 0, 0, 0, 410, 411, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 413, 0, 0, + 410, 411, 0, 0, 249, 0, 412, 413, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 0, 0, 0, 0, 0, 0, 0, 0, -274, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 0, 0, 0, 0, 410, 411, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 413, 0, + 416, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 0, 0, 0, 0, 0, 0, 0, 0, + -273, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 0, 0, 0, 0, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 414, - 0, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 0, 0, 0, 0, 0, 0, 0, 0, -275, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 0, 0, 0, 0, 410, 411, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 413, + 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 416, 0, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 0, 0, 0, 0, 0, 0, 0, + 0, -274, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 0, 0, 0, 0, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 414, 0, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 0, 0, 0, 0, 0, 0, 0, 0, - -276, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 0, 0, 0, 0, 410, 411, 0, - 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, + 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 416, 0, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 0, 0, 0, 0, 0, 0, + 0, 0, -275, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 0, 0, 0, 0, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 414, 0, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 0, 0, 0, 0, 410, - 411, 0, 0, 0, 493, 0, 0, 0, 0, 0, - 0, 0, 413, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 416, 0, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 0, 0, 0, 0, 0, + 0, 0, 0, -276, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 0, 0, 0, 0, + 412, 413, 0, 0, 0, 414, 0, 0, 0, 0, + 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 414, 0, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 0, 0, 0, - 0, 410, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 413, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 416, 0, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 0, 0, + 0, 0, 412, 413, 0, 0, 0, 495, 0, 0, + 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 414, 0, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, -606, -606, 0, - 0, 0, 0, 410, 411, 398, 399, 400, 401, 402, - 403, 404, 0, 406, 407, 0, 413, 0, 0, 0, - 0, 410, 411, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 413, 0, 0, 0, 0, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 0, - 0, 0, 0, 0, 0, 0, 0, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 398, 399, 400, - 401, 402, 403, 0, 0, 406, 407, 0, 0, 0, - 0, 0, 0, 410, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 413, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 416, 0, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 0, 0, 0, 0, 412, 413, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 416, 0, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + -608, -608, 0, 0, 0, 0, 412, 413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426 }; static const yytype_int16 yycheck[] = { - 2, 16, 17, 27, 10, 20, 89, 28, 482, 15, - 2, 374, 4, 5, 6, 473, 7, 9, 10, 21, - 27, 13, 7, 15, 16, 17, 397, 56, 20, 14, - 220, 305, 500, 69, 585, 309, 66, 87, 88, 54, - 55, 582, 269, 28, 25, 82, 16, 17, 15, 52, - 20, 369, 54, 55, 14, 16, 17, 4, 427, 20, - 52, 329, 530, 582, 56, 118, 585, 58, 28, 680, - 317, 389, 538, 58, 66, 488, 91, 2, 689, 4, - 294, 74, 75, 452, 746, 21, 22, 5, 6, 16, - 82, 312, 929, 54, 55, 13, 657, 658, 467, 437, - 438, 16, 69, 60, 61, 62, 63, 476, 25, 111, - 16, 22, 16, 17, 16, 17, 20, 29, 20, 138, - 367, 90, 496, 213, 25, 117, 500, 119, 121, 122, - 220, 770, 26, 26, 600, 57, 454, 330, 56, 92, - 333, 383, 335, 385, 337, 26, 339, 952, 267, 25, - 269, 61, 54, 25, 64, 65, 0, 5, 6, 25, - 25, 142, 25, 144, 82, 13, 216, 257, 121, 105, - 144, 540, 55, 789, 148, 111, 112, 227, 147, 795, - 394, 60, 28, 1020, 63, 304, 397, 121, 115, 142, - 90, 118, 119, 129, 105, 57, 90, 5, 6, 121, - 115, 113, 90, 118, 119, 13, 116, 117, 56, 115, - 751, 105, 118, 119, 142, 221, 222, 105, 210, 146, - 488, 148, 58, 59, 1029, 142, 437, 438, 107, 221, - 222, 146, 751, 148, 82, 90, 142, 121, 288, 800, - 146, 142, 148, 144, 138, 138, 140, 147, 56, 240, - 144, 770, 720, 147, 52, 240, 346, 138, 273, 147, - 296, 123, 277, 144, 314, 267, 142, 269, 304, 305, - 142, 273, 934, 309, 82, 312, 142, 142, 505, 142, - 548, 273, 92, 250, 61, 277, 376, 64, 65, 281, - 282, 294, 147, 92, 286, 542, 709, 92, 92, 26, - 103, 293, 294, 273, 855, 79, 144, 277, 679, 301, - 949, 121, 778, 952, 925, 115, 277, 538, 118, 119, - 312, 119, 121, 90, 317, 128, 121, 90, 121, 296, - 90, 90, 90, 144, 75, 90, 855, 125, 90, 116, - 117, 347, 348, 349, 350, 719, 720, 142, 148, 142, - 668, 55, 126, 546, 346, 347, 348, 349, 350, 351, - 352, 353, 392, 90, 582, 322, 395, 397, 293, 827, - 372, 273, 374, 277, 367, 277, 301, 369, 105, 600, - 147, 122, 472, 473, 147, 504, 505, 147, 147, 147, - 1029, 394, 147, 756, 312, 147, 121, 389, 451, 346, - 392, 653, 394, 395, 656, 397, 51, 437, 438, 142, - 55, 138, 427, 140, 783, 148, 90, 791, 37, 38, - 147, 346, 674, 92, 115, 427, 351, 118, 119, 55, - 949, 105, 522, 952, 18, 427, 20, 452, 706, 529, - 25, 709, 142, 92, 429, 437, 438, 432, 786, 20, - 452, 925, 467, 771, 792, 793, 730, 427, 460, 927, - 452, 476, 454, 455, 312, 467, 140, 142, 453, 16, - 494, 463, 121, 147, 476, 467, 92, 395, 597, 471, - 798, 496, 452, 468, 476, 500, 713, 494, 286, 481, - 392, 512, 477, 429, 92, 397, 294, 467, 57, 536, - 92, 538, 504, 505, 312, 121, 476, 870, 871, 138, - 1029, 513, 527, 92, 704, 530, 92, 453, 760, 761, - 762, 513, 764, 121, 766, 540, 844, 512, 647, 121, - 522, 516, 468, 751, 101, 496, 503, 145, 540, 17, - 18, 477, 121, 121, 536, 121, 538, 395, 540, 542, - 142, 141, 512, 927, 55, 547, 541, 778, 896, 90, - 610, 58, 59, 600, 92, 833, 527, 139, 115, 780, - 540, 118, 119, 92, 105, 786, 666, 92, 92, 142, - 516, 792, 793, 485, 101, 704, 121, 395, 513, 907, - 101, 593, 51, 121, 713, 51, 394, 522, 142, 146, - 90, 148, 121, 142, 628, 541, 121, 121, 600, 140, - 837, 92, 142, 144, 704, 105, 147, 2, 536, 4, - 538, 628, 142, 142, 9, 10, 51, 142, 142, 92, - 15, 16, 17, 851, 27, 20, 142, 367, 1001, 92, - 121, 859, 101, 102, 103, 647, 1015, 866, 867, 90, - 140, 653, 74, 75, 656, 657, 658, 147, 121, 90, - 51, 667, 142, 121, 105, 463, 99, 52, 121, 128, - 51, 101, 674, 471, 105, 667, 668, 679, 680, 700, - 682, 66, 600, 481, 15, 896, 677, 689, 536, 13, - 538, 16, 677, 699, 730, 937, 938, 939, 940, 140, - 63, 131, 132, 133, 719, 720, 147, 699, 644, 140, - 26, 713, 802, 796, 738, 700, 147, 653, 837, 15, - 656, 911, 115, 142, 145, 118, 119, 917, 536, 145, - 538, 949, 117, 644, 119, 139, 672, 827, 674, 142, - 700, 778, 653, 15, 115, 656, 90, 118, 119, 547, - 780, 15, 600, 146, 756, 148, 786, 787, 719, 142, - 44, 105, 792, 793, 121, 26, 9, 10, 783, 141, - 15, 141, 15, 141, 90, 141, 791, 679, 18, 771, - 139, 783, 15, 1025, 437, 438, 778, 779, 780, 105, - 139, 783, 600, 141, 786, 787, 140, 148, 800, 784, - 792, 793, 139, 147, 1022, 57, 798, 799, 810, 815, - 142, 813, 770, 783, 26, 1033, 469, 470, 15, 142, - 812, 911, 138, 815, 140, 210, 26, 917, 144, 90, - 791, 147, 824, 825, 142, 837, 221, 222, 568, 142, - 832, 90, 866, 867, 105, 142, 575, 93, 784, 14, - 579, 15, 844, 845, 779, 585, 105, 15, 588, 575, - 778, 146, 145, 142, 517, 142, 896, 142, 870, 871, - 90, 142, 142, 15, 117, 141, 868, 138, 90, 140, - 298, 873, 15, 144, 302, 105, 147, 15, 273, 139, - 90, 140, 277, 105, 15, 90, 281, 282, 147, 15, - 139, 286, 126, 126, 896, 105, 142, 55, 293, 294, - 105, 139, 927, 15, 906, 907, 301, 55, 910, 969, - 140, 142, 914, 925, 37, 38, 138, 147, 140, 142, - 778, 142, 144, 90, 142, 147, 90, 142, 138, 142, - 140, 15, 144, 144, 144, 140, 142, 147, 105, 141, - 868, 105, 147, 513, 13, 873, 6, 1018, 982, 1017, - 1020, 346, 347, 348, 349, 350, 351, 352, 353, 770, - 778, 797, 90, 7, 252, 982, 575, 949, 221, 222, - 972, 946, 974, 140, 369, 977, 140, 105, 946, -1, - 147, 949, 910, 147, 952, 62, 954, 64, 65, 1001, - 1015, 799, 115, 268, 389, 118, 119, 392, -1, 394, - -1, -1, 397, 1015, 812, 1017, 1018, -1, -1, -1, - 868, -1, 140, 1015, -1, 873, 824, 825, -1, 147, - -1, 1016, -1, 146, 832, 148, -1, -1, 281, 282, - 770, 770, 427, -1, 1002, 1015, -1, 845, -1, 116, - 117, -1, 437, 438, 770, 40, 41, 42, 43, 44, - 868, -1, 910, -1, -1, 873, -1, 452, -1, 454, - 455, 1029, 425, 1031, -1, 1033, 429, 1035, 463, 432, - 1016, -1, 467, 501, -1, -1, 471, -1, 90, -1, - 508, 476, -1, -1, -1, -1, 481, 1055, -1, 90, - 453, 519, 910, 105, 347, 348, 349, 350, 906, 352, - 353, -1, -1, 466, 105, 468, 914, 51, -1, 53, - 54, 55, 56, -1, 477, 855, -1, 857, 513, -1, - -1, 861, 90, 786, 787, 69, -1, 522, 140, 792, - 793, 62, -1, 64, 65, 147, -1, 105, -1, 140, - -1, 569, 570, 9, 10, 540, 147, 875, 876, 15, - 16, 17, 547, 516, 20, 818, 819, -1, 821, 822, - -1, -1, -1, -1, 972, -1, 974, -1, -1, 977, - -1, 599, 140, -1, -1, -1, -1, -1, 541, 147, - -1, 47, 48, 49, 50, 116, 117, -1, 54, 55, - -1, 115, 932, 933, 118, 119, -1, -1, 142, -1, - 66, 67, 455, -1, 63, 64, 65, 946, -1, -1, - 949, -1, 952, 952, 954, 954, 63, 64, 65, -1, - 946, 949, 146, 949, 148, -1, 952, 51, 954, 53, - 54, 55, 56, 896, 63, 64, 65, 51, -1, 53, - 54, 55, 56, -1, -1, 69, -1, -1, 676, 989, - -1, 117, 992, -1, -1, 69, 919, 116, 117, 63, - 64, 65, -1, 1002, -1, -1, -1, -1, -1, 116, - 117, -1, 667, 668, -1, -1, 1002, 1005, 1006, 1007, - 94, 1009, 1010, -1, 1024, -1, 100, 116, 117, 1029, - 1029, 1031, 1031, -1, 1033, 1035, 1035, 63, 64, 65, - -1, 729, -1, 1029, 699, 1031, -1, 1033, -1, 1035, - -1, -1, 116, 117, -1, 1055, 1055, -1, 142, 747, - 0, 1049, 1050, 1051, 1052, -1, -1, -1, -1, 1055, - -1, 1059, -1, 13, 14, 15, 16, 17, 18, -1, - 20, -1, -1, -1, -1, -1, 26, 27, -1, -1, - 116, 117, 63, 64, 65, 221, 222, 37, 38, -1, - 40, 41, 42, 43, 44, -1, -1, -1, 2, -1, - 4, 5, 6, 63, 64, 65, 771, -1, -1, 13, - 63, 64, 65, -1, 779, 780, -1, -1, 783, -1, - -1, 786, 787, 259, 260, 261, 262, 792, 793, -1, - 88, 89, -1, 798, 799, 116, 117, 273, 836, -1, - 90, 277, -1, 101, 667, 281, 282, 812, 52, 782, - 815, 784, 56, -1, 852, 105, 116, 117, -1, 824, - 825, -1, -1, 116, 117, 115, -1, 832, 118, 119, - 128, 129, 130, 131, 132, 133, 699, -1, 82, 844, - 845, 51, -1, 53, 54, 55, 56, -1, 138, 139, - -1, -1, -1, -1, 144, 145, 146, 147, 148, 69, - 51, -1, 53, 54, 55, 56, -1, 101, -1, 88, - 89, 347, 348, 349, 350, 119, 352, 353, 69, -1, - -1, -1, 101, -1, 94, -1, -1, -1, -1, -1, - 100, 896, -1, -1, 370, 129, 130, 131, 132, 133, - -1, 906, 907, 94, -1, 381, -1, -1, -1, 914, - 129, 130, 131, 132, 133, -1, 392, -1, -1, -1, - -1, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, -1, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, -1, - -1, 427, 815, -1, -1, -1, -1, 2, -1, 4, - -1, 437, 438, -1, -1, -1, 210, 972, 13, 974, - -1, 115, 977, -1, 118, 119, 452, -1, -1, 455, - -1, 2, -1, 4, 5, 6, 7, -1, -1, 465, - -1, 467, 13, 469, 470, -1, -1, -1, -1, -1, - 476, 145, 146, -1, 148, -1, -1, 52, -1, 485, - 1015, -1, -1, 489, -1, -1, -1, 493, -1, -1, - 496, -1, 498, -1, 500, 501, -1, -1, -1, 115, - -1, 52, 118, 119, 51, 56, 53, 54, 55, 56, - -1, 517, 286, 1016, -1, -1, -1, -1, -1, 293, - 294, 527, 69, -1, 530, -1, 142, 301, -1, -1, - 146, 82, 148, -1, 540, -1, -1, -1, 312, -1, - -1, -1, -1, -1, 119, -1, -1, 94, -1, -1, - 556, 557, -1, 100, 101, 102, 103, 51, -1, 53, - 54, 55, 56, -1, -1, -1, 572, -1, 119, 44, - -1, -1, 346, -1, -1, 69, -1, 351, -1, -1, - -1, 128, -1, -1, 131, 591, -1, -1, 594, -1, - -1, -1, -1, -1, -1, 369, -1, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, -1, -1, 88, 89, 389, -1, -1, -1, -1, - 394, 395, -1, 397, -1, 51, 101, 53, 54, 55, - 56, -1, -1, -1, -1, 210, -1, -1, -1, -1, - 2, -1, 4, 69, -1, -1, -1, 122, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 210, - -1, 667, -1, 437, 438, -1, -1, 142, 94, -1, - -1, -1, -1, 679, 100, 101, 102, 103, -1, -1, - 454, 51, -1, 53, 54, 55, 56, -1, -1, 463, - 52, -1, -1, 699, -1, -1, -1, 471, -1, 69, - -1, -1, 128, -1, 710, 131, -1, 481, -1, -1, - -1, 286, -1, 719, 720, -1, 142, -1, 293, 294, - -1, -1, -1, -1, 94, -1, 301, -1, -1, -1, - -1, 101, 102, 103, -1, 286, -1, -1, -1, 513, - -1, -1, 293, 294, -1, -1, -1, -1, 522, -1, - 301, -1, -1, -1, -1, -1, -1, 119, 128, -1, - -1, 312, 536, -1, 538, -1, -1, -1, -1, 775, - -1, 346, -1, 547, 780, 781, 351, 783, -1, -1, - 786, 787, -1, -1, -1, 791, 792, 793, -1, -1, - -1, -1, -1, -1, 369, 346, -1, -1, -1, -1, - 351, -1, -1, -1, -1, -1, -1, -1, -1, 815, - -1, -1, 818, 819, 389, 821, 822, -1, 369, 394, - -1, -1, 397, -1, -1, 831, 600, -1, -1, -1, - 836, -1, -1, -1, -1, -1, -1, -1, 389, -1, - -1, -1, -1, 394, 395, -1, -1, 853, 210, 51, - -1, 53, 54, 55, 56, -1, -1, -1, 864, -1, - -1, -1, 437, 438, -1, -1, -1, 69, -1, -1, - -1, -1, -1, 879, -1, -1, -1, -1, -1, 454, - -1, -1, -1, 889, 890, -1, -1, -1, 463, -1, - 896, -1, 94, -1, 668, -1, 471, -1, 100, 101, - 102, 103, -1, 454, -1, -1, 481, -1, -1, -1, - -1, -1, 463, 919, -1, -1, -1, -1, -1, -1, - 471, 927, -1, -1, 286, -1, 128, -1, -1, 131, - 481, 293, 294, -1, -1, 88, 89, -1, 513, 301, - -1, -1, 144, -1, -1, -1, -1, 522, 101, 51, - -1, 53, 54, 55, 56, -1, -1, -1, -1, -1, - -1, -1, 513, -1, -1, -1, -1, 69, -1, -1, - -1, 522, 547, 126, 127, 128, 129, 130, 131, 132, - 133, -1, -1, -1, 346, 536, -1, 538, -1, 351, - -1, -1, 94, -1, -1, -1, 547, 771, 100, 101, - 102, 103, -1, -1, 778, 779, 780, 369, -1, 1015, - -1, -1, 786, -1, -1, -1, -1, -1, 792, 793, - -1, -1, -1, -1, 798, 799, 128, 389, -1, 131, - -1, -1, 394, -1, -1, 397, -1, -1, 812, -1, - -1, -1, 144, -1, -1, -1, -1, -1, -1, 600, - 824, 825, -1, -1, -1, -1, -1, -1, 832, -1, + 2, 16, 17, 89, 220, 20, 27, 69, 475, 27, + 2, 56, 4, 5, 6, 484, 82, 9, 10, 21, + 66, 13, 7, 15, 16, 17, 429, 7, 20, 14, + 14, 118, 4, 52, 87, 88, 269, 772, 312, 54, + 55, 305, 28, 28, 28, 309, 16, 17, 22, 15, + 20, 454, 54, 55, 74, 75, 329, 375, 584, 399, + 52, 16, 17, 748, 56, 20, 469, 587, 540, 5, + 6, 317, 74, 58, 66, 478, 91, 13, 58, 584, + 502, 60, 61, 62, 63, 490, 21, 22, 16, 17, + 82, 25, 20, 10, 659, 660, 16, 26, 15, 54, + 55, 121, 122, 69, 772, 5, 6, 954, 26, 111, + 532, 294, 57, 13, 90, 370, 931, 79, 29, 682, + 56, 367, 2, 25, 4, 117, 90, 119, 691, 51, + 602, 105, 25, 27, 5, 6, 391, 0, 92, 542, + 25, 105, 13, 92, 92, 584, 82, 25, 587, 75, + 103, 25, 330, 25, 142, 333, 56, 335, 28, 337, + 148, 339, 427, 216, 126, 25, 431, 121, 92, 434, + 105, 147, 121, 121, 227, 128, 111, 112, 123, 101, + 102, 103, 82, 147, 1031, 56, 791, 138, 142, 384, + 455, 386, 797, 90, 129, 115, 122, 121, 118, 119, + 498, 456, 113, 468, 502, 470, 128, 1022, 142, 138, + 144, 82, 57, 396, 479, 144, 951, 490, 210, 954, + 138, 115, 142, 55, 118, 119, 146, 753, 148, 221, + 222, 439, 440, 121, 296, 288, 90, 802, 9, 10, + 142, 144, 304, 305, 15, 148, 312, 309, 753, 142, + 147, 936, 146, 518, 148, 240, 90, 142, 273, 144, + 240, 314, 277, 142, 142, 267, 540, 269, 142, 90, + 142, 273, 90, 121, 507, 294, 121, 550, 543, 92, + 948, 273, 142, 951, 250, 277, 954, 90, 956, 281, + 282, 121, 92, 147, 286, 92, 1031, 317, 544, 125, + 722, 293, 294, 273, 221, 222, 711, 277, 780, 301, + 92, 92, 142, 147, 753, 90, 37, 38, 90, 52, + 312, 121, 277, 90, 121, 144, 147, 853, 602, 147, + 296, 58, 59, 772, 51, 861, 1004, 857, 55, 121, + 121, 681, 142, 322, 147, 142, 117, 367, 394, 277, + 92, 144, 397, 399, 346, 347, 348, 349, 350, 351, + 352, 353, 829, 1031, 927, 1033, 453, 1035, 399, 1037, + 548, 373, 147, 375, 346, 147, 312, 396, 370, 121, + 147, 60, 785, 18, 63, 20, 119, 92, 92, 1057, + 92, 16, 17, 439, 440, 20, 55, 92, 121, 391, + 142, 92, 394, 55, 396, 397, 25, 399, 439, 440, + 58, 59, 312, 293, 429, 670, 121, 121, 857, 121, + 142, 301, 20, 721, 722, 951, 121, 429, 107, 54, + 347, 348, 349, 350, 142, 708, 57, 429, 711, 454, + 758, 312, 17, 18, 868, 869, 431, 439, 440, 434, + 221, 222, 454, 115, 469, 138, 118, 119, 927, 429, + 462, 397, 454, 478, 456, 457, 346, 469, 732, 101, + 455, 351, 538, 465, 540, 496, 478, 469, 496, 74, + 75, 473, 715, 498, 454, 470, 478, 502, 145, 115, + 706, 483, 118, 119, 479, 793, 431, 397, 1024, 469, + 141, 121, 367, 139, 506, 507, 780, 929, 478, 1035, + 281, 282, 951, 515, 529, 954, 55, 532, 773, 784, + 455, 786, 148, 515, 544, 142, 397, 542, 514, 514, + 514, 101, 524, 518, 61, 470, 602, 64, 65, 505, + 542, 92, 101, 498, 479, 800, 538, 267, 540, 269, + 542, 142, 121, 286, 872, 873, 92, 549, 543, 612, + 61, 294, 835, 64, 65, 121, 101, 762, 763, 764, + 121, 766, 542, 768, 529, 51, 347, 348, 349, 350, + 788, 352, 353, 518, 304, 121, 794, 795, 142, 116, + 117, 846, 1031, 595, 129, 130, 131, 132, 133, 92, + 655, 92, 538, 658, 540, 90, 839, 51, 543, 630, + 602, 2, 630, 4, 1017, 116, 117, 142, 9, 10, + 105, 676, 142, 142, 15, 16, 17, 51, 121, 20, + 121, 929, 121, 115, 142, 515, 118, 119, 538, 51, + 540, 99, 15, 13, 524, 16, 63, 649, 273, 142, + 577, 142, 277, 655, 909, 140, 658, 659, 660, 144, + 15, 52, 147, 396, 298, 145, 602, 538, 302, 540, + 732, 145, 646, 139, 676, 66, 15, 669, 670, 681, + 682, 655, 684, 142, 658, 1003, 457, 142, 15, 691, + 898, 142, 44, 121, 679, 141, 16, 913, 141, 679, + 15, 18, 602, 919, 141, 570, 721, 722, 141, 701, + 139, 646, 798, 715, 780, 26, 702, 702, 702, 740, + 655, 15, 587, 658, 139, 590, 117, 141, 119, 148, + 139, 602, 465, 57, 142, 142, 782, 142, 142, 674, + 473, 676, 788, 789, 939, 940, 941, 942, 794, 795, + 483, 782, 669, 1018, 142, 15, 758, 788, 93, 14, + 145, 90, 16, 794, 795, 15, 721, 90, 15, 394, + 785, 146, 15, 142, 399, 101, 105, 142, 793, 90, + 142, 773, 105, 785, 701, 142, 506, 507, 780, 781, + 782, 142, 141, 785, 105, 115, 788, 789, 118, 119, + 802, 786, 794, 795, 15, 131, 132, 133, 800, 801, + 812, 140, 15, 815, 213, 785, 549, 140, 147, 210, + 16, 220, 814, 139, 147, 817, 146, 138, 148, 140, + 221, 222, 1027, 144, 826, 827, 147, 839, 793, 577, + 15, 15, 834, 581, 780, 772, 142, 868, 869, 139, + 126, 786, 898, 126, 846, 847, 55, 139, 257, 15, + 55, 115, 487, 142, 118, 119, 15, 898, 142, 503, + 872, 873, 62, 142, 64, 65, 510, 142, 870, 599, + 780, 142, 273, 875, 142, 144, 277, 521, 144, 141, + 281, 282, 146, 142, 148, 286, 90, 515, 669, 13, + 817, 781, 293, 294, 6, 1020, 898, 772, 772, 780, + 301, 105, 1022, 799, 929, 1019, 908, 909, 971, 115, + 912, 252, 118, 119, 916, 927, 116, 117, 7, 649, + 701, 577, 948, 90, 870, 268, -1, 571, 572, 875, + 951, -1, 62, 26, 64, 65, 140, 346, 105, -1, + 146, -1, 148, 147, -1, 346, 347, 348, 349, 350, + 351, 352, 353, 984, -1, -1, 984, 601, 877, 878, + 870, -1, -1, 90, -1, 875, 912, -1, 377, 370, + -1, -1, 974, 140, 976, -1, 706, 979, 105, -1, + 147, -1, 857, -1, 859, 715, 116, 117, 863, 870, + 391, 1003, 1017, 394, 875, 396, 115, 90, 399, 118, + 119, -1, 912, -1, -1, 1017, -1, 1019, 1020, -1, + -1, 948, 105, 140, 951, 1017, -1, 954, -1, 956, + 147, -1, -1, 1018, 772, -1, 145, 146, 429, 148, + -1, 912, 951, -1, 678, -1, 817, 1017, 439, 440, + -1, -1, -1, 37, 38, 138, 681, 140, -1, 26, + -1, 144, -1, 454, 147, 456, 457, -1, 801, 934, + 935, -1, -1, -1, 465, 474, 475, 1004, 469, -1, + -1, 814, 473, 1018, 26, -1, -1, 478, -1, 954, + -1, 956, 483, 826, 827, -1, -1, 731, 1007, 1008, + 1009, 834, 1011, 1012, 1031, -1, 1033, -1, 1035, -1, + 1037, -1, -1, -1, 847, 749, -1, -1, 26, 839, + -1, 26, -1, 90, 515, 524, 991, -1, -1, 994, + 1057, 115, 531, 524, 118, 119, 115, -1, 105, 118, + 119, -1, 1051, 1052, 1053, 1054, 439, 440, 90, 9, + 10, 542, 1061, -1, -1, 15, 16, 17, 549, -1, + 20, 1026, 146, 105, 148, -1, 1031, 146, 1033, 148, + -1, 138, 1037, 140, -1, 908, -1, 144, 471, 472, + 147, -1, 90, 916, -1, 90, -1, 47, 48, 49, + 50, -1, 1057, -1, 54, 55, 138, 105, 140, 90, + 105, -1, 144, -1, 838, 147, 66, 67, 90, -1, + 948, -1, -1, 951, 105, -1, 954, -1, 956, -1, + 854, -1, -1, 105, -1, -1, 519, -1, -1, -1, + 138, -1, 140, 138, -1, 140, 144, -1, -1, 147, + -1, 974, 147, 976, -1, -1, 979, -1, 90, 140, + -1, 51, 52, -1, -1, 55, 147, 117, 140, 63, + 64, 65, -1, 105, -1, 147, 1004, -1, -1, 668, + 70, 71, 72, 73, 74, 75, 76, 77, 669, 670, + 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, + -1, -1, -1, 1031, -1, 1033, -1, 1035, 140, 1037, + 100, 101, 102, 90, -1, 147, 90, 706, 90, -1, + 701, -1, 116, 117, -1, -1, -1, -1, 105, 1057, + -1, 105, -1, 105, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, -1, 135, 136, 51, -1, 53, + 54, 55, 56, 143, 144, -1, 51, -1, 53, 54, + 55, 56, -1, 140, -1, 69, 140, 90, 140, -1, + 147, 221, 222, 147, 69, 147, 2, -1, 4, 5, + 6, 51, 105, 53, 54, 55, 56, 13, -1, -1, + -1, -1, 773, 40, 41, 42, 43, 44, -1, 69, + 781, 782, -1, -1, 785, -1, -1, 788, 789, 259, + 260, 261, 262, 794, 795, 804, -1, 140, -1, 800, + 801, -1, 90, 273, 147, -1, 52, 277, -1, -1, + 56, 281, 282, 814, -1, 90, 817, 105, 142, 51, + 829, 53, 54, 55, 56, 826, 827, 142, -1, -1, + 105, -1, -1, 834, -1, -1, 82, 69, -1, -1, + 63, 64, 65, -1, -1, 846, 847, -1, -1, 63, + 64, 65, 140, 85, -1, -1, -1, 115, -1, 147, + 118, 119, 94, -1, -1, 140, -1, -1, 100, 101, + 102, 103, 147, 119, 63, 64, 65, 347, 348, 349, + 350, -1, 352, 353, 142, 788, 789, -1, 146, -1, + 148, 794, 795, 116, 117, -1, 128, 898, -1, 131, + -1, 371, 116, 117, 913, -1, -1, 908, 909, -1, + 919, -1, 382, -1, -1, 916, -1, 820, 821, -1, + 823, 824, -1, -1, 394, -1, -1, 116, 117, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, -1, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, -1, -1, 429, + 63, 64, 65, -1, 210, -1, 63, 64, 65, 439, + 440, -1, -1, 974, -1, 976, -1, -1, 979, -1, + -1, 63, 64, 65, 454, -1, 51, 457, 53, 54, + 55, 56, 63, 64, 65, 898, -1, 467, -1, 469, + -1, 471, 472, -1, 69, -1, -1, -1, 478, 88, + 89, -1, -1, 116, 117, -1, 1017, 487, 921, 116, + 117, 491, 101, -1, -1, 495, -1, -1, 498, 94, + 500, -1, 502, 503, 116, 117, 101, 102, 103, -1, + 286, -1, -1, -1, -1, 116, 117, 293, 294, 519, + 129, 130, 131, 132, 133, 301, -1, -1, -1, 529, + -1, -1, 532, 128, -1, -1, 312, -1, -1, -1, + -1, -1, 542, -1, -1, -1, -1, -1, 51, -1, + 53, 54, 55, 56, -1, -1, -1, -1, 558, 559, + 2, -1, 4, 5, 6, 7, 69, -1, -1, -1, + 346, 13, -1, -1, 574, 351, -1, -1, -1, -1, + -1, -1, -1, 51, -1, 53, 54, 55, 56, -1, + -1, 94, -1, 593, 370, -1, 596, 100, 101, 102, + 103, 69, -1, -1, -1, -1, -1, -1, -1, -1, + 52, -1, -1, -1, 56, 391, -1, -1, 121, -1, + 396, 397, -1, 399, -1, 128, 94, -1, 131, -1, + -1, -1, 100, 51, -1, 53, 54, 55, 56, -1, + 82, 144, -1, 51, -1, 53, 54, 55, 56, -1, + -1, 69, -1, 51, -1, 53, 54, 55, 56, -1, + -1, 69, -1, 439, 440, -1, -1, -1, -1, 669, + -1, 69, -1, -1, -1, -1, 94, 119, -1, -1, + 456, 681, 100, 101, 102, 103, 94, -1, -1, 465, + -1, -1, 100, 101, 102, 103, 94, 473, -1, -1, + -1, 701, 100, 101, 102, 103, -1, 483, -1, -1, + 128, -1, 712, 131, 51, -1, 53, 54, 55, 56, + 128, 721, 722, 131, -1, -1, 144, -1, -1, -1, + 128, -1, 69, 131, -1, -1, 144, -1, -1, 515, + -1, -1, -1, -1, 142, -1, -1, 51, 524, 53, + 54, 55, 56, -1, -1, -1, 2, 94, 4, -1, + -1, -1, 538, 100, 540, 69, -1, 13, 210, -1, + -1, -1, -1, 549, -1, -1, -1, 777, -1, -1, + -1, -1, 782, 783, -1, 785, -1, -1, 788, 789, + 94, -1, -1, 793, 794, 795, -1, 51, -1, 53, + 54, 55, 56, -1, -1, -1, 52, -1, -1, -1, + -1, -1, -1, -1, -1, 69, -1, 817, -1, -1, + 820, 821, -1, 823, 824, -1, 602, -1, -1, -1, + -1, 85, -1, 833, -1, -1, -1, -1, 838, -1, + 94, -1, -1, -1, 286, -1, 100, 101, 102, 103, + -1, 293, 294, -1, -1, 855, -1, -1, -1, 301, + -1, -1, -1, -1, -1, -1, 866, -1, -1, -1, + 312, 88, 89, 119, 128, -1, -1, 131, -1, -1, + -1, 881, -1, -1, 101, -1, -1, -1, -1, -1, + -1, 891, 892, -1, 670, -1, -1, -1, 898, -1, + -1, -1, 44, -1, 346, -1, -1, -1, -1, 351, + -1, 128, 129, 130, 131, 132, 133, 2, -1, 4, + -1, 921, -1, -1, -1, -1, -1, -1, 370, 929, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, -1, -1, -1, -1, 88, 89, -1, 391, + -1, -1, -1, -1, 396, 397, -1, -1, -1, 101, + -1, -1, -1, -1, 210, -1, -1, 52, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, -1, -1, -1, -1, -1, 773, -1, -1, + 142, -1, -1, -1, 780, 781, 782, -1, -1, -1, + -1, -1, 788, -1, 456, -1, -1, 1017, 794, 795, + -1, -1, -1, 465, 800, 801, -1, -1, -1, -1, + -1, 473, -1, -1, 119, -1, -1, -1, 814, -1, + 286, 483, -1, -1, -1, -1, -1, 293, 294, -1, + 826, 827, -1, -1, -1, 301, -1, -1, 834, -1, -1, 51, -1, 53, 54, 55, 56, -1, -1, -1, - 844, 845, -1, -1, -1, 437, 438, -1, -1, 69, + 846, 847, -1, 515, -1, -1, 88, 89, -1, 69, + -1, -1, 524, -1, -1, -1, -1, -1, -1, 101, + -1, -1, -1, -1, 870, -1, 538, -1, 540, 875, + 346, -1, -1, -1, 94, 351, -1, 549, -1, -1, + 100, 101, 102, 103, 126, 127, 128, 129, 130, 131, + 132, 133, 898, -1, 370, 210, 72, 73, 74, 75, + 76, 77, 908, 909, 80, 81, 912, -1, 128, -1, + 916, 131, 88, 89, -1, 391, -1, -1, -1, -1, + 396, -1, -1, 399, -1, 101, -1, -1, -1, -1, + 602, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, -1, + -1, -1, -1, 439, 440, -1, -1, -1, 974, -1, + 976, 286, -1, 979, -1, -1, -1, -1, 293, 294, + 456, -1, -1, -1, -1, -1, 301, -1, -1, 465, + -1, -1, -1, -1, -1, -1, -1, 473, 670, -1, + 0, -1, -1, -1, -1, -1, -1, 483, -1, -1, + -1, -1, -1, 13, 14, 15, 16, 17, 18, -1, + 20, -1, -1, -1, -1, -1, 26, 27, -1, -1, + -1, 346, -1, -1, -1, -1, 351, 37, 38, 515, + 40, 41, 42, 43, 44, -1, -1, -1, 524, -1, + -1, -1, -1, -1, -1, 370, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 454, 668, 868, 85, -1, -1, -1, 873, - -1, 463, -1, 51, 94, 53, 54, 55, 56, 471, - 100, 101, 102, 103, -1, -1, -1, 668, -1, 481, - -1, 69, 896, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 906, 907, -1, -1, 910, 85, 128, -1, - 914, 131, -1, -1, -1, -1, 94, -1, -1, -1, - -1, 513, 100, 101, 102, 103, -1, -1, -1, -1, - 522, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 549, -1, -1, 391, -1, -1, -1, + -1, 396, -1, -1, 399, -1, -1, -1, -1, -1, + 90, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 773, -1, -1, -1, 105, -1, -1, 780, 781, + -1, -1, -1, -1, -1, 115, -1, -1, 118, 119, + -1, -1, -1, -1, 439, 440, -1, -1, 800, 801, + -1, -1, -1, -1, -1, -1, -1, -1, 138, 139, + -1, 456, 814, -1, 144, 145, 146, 147, 148, -1, + 465, -1, -1, -1, 826, 827, -1, -1, 473, -1, + -1, -1, 834, -1, -1, -1, -1, -1, 483, -1, + -1, -1, -1, -1, 846, 847, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 128, -1, -1, 131, -1, 547, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 771, -1, 972, -1, - 974, -1, -1, 977, 779, 780, -1, -1, -1, -1, - -1, 786, -1, -1, -1, -1, -1, 792, 793, -1, - 771, -1, -1, 798, 799, -1, -1, 778, 779, -1, - -1, -1, -1, -1, -1, -1, -1, 812, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 798, 799, 824, - 825, -1, -1, -1, -1, -1, -1, 832, -1, -1, - -1, 812, -1, -1, -1, -1, -1, -1, -1, 844, - 845, -1, -1, 824, 825, -1, -1, -1, -1, -1, - -1, 832, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 844, 845, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 668, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 868, -1, -1, - -1, 896, 873, -1, -1, 72, 73, 74, 75, 76, - 77, 906, 907, 80, 81, 910, -1, -1, -1, 914, - -1, 88, 89, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 101, 906, 907, -1, -1, 910, - -1, -1, -1, 914, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 972, -1, 974, - -1, -1, 977, -1, -1, -1, -1, -1, -1, 771, - 44, -1, -1, -1, -1, -1, -1, 779, 780, -1, - -1, 972, -1, 974, 786, -1, 977, -1, -1, -1, - 792, 793, -1, -1, -1, -1, 798, 799, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 812, -1, -1, -1, 88, 89, -1, -1, -1, -1, - -1, -1, 824, 825, -1, -1, -1, 101, -1, -1, - 832, -1, -1, 44, -1, -1, -1, -1, -1, -1, - -1, -1, 844, 845, -1, -1, -1, -1, 122, -1, + -1, -1, 51, 52, 670, -1, 55, -1, 870, -1, + 515, -1, -1, 875, -1, -1, -1, -1, -1, 524, + -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, + -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, + 89, -1, -1, -1, 549, -1, 908, 909, -1, -1, + 912, 100, 101, 102, 916, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, -1, 135, 136, -1, -1, + -1, -1, -1, -1, 143, 144, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 773, -1, -1, + -1, -1, 974, -1, 976, 781, 782, 979, -1, -1, + 51, 52, 788, -1, 55, -1, -1, -1, 794, 795, + -1, -1, -1, -1, 800, 801, -1, -1, -1, 70, + 71, 72, 73, 74, 75, 76, 77, -1, 814, 80, + 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, + 826, 827, -1, -1, -1, 670, -1, -1, 834, 100, + 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, + 846, 847, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, -1, 135, 136, 72, 73, 74, 75, + 76, 77, 143, 144, 80, 81, -1, -1, -1, -1, + -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, 898, -1, -1, 101, -1, -1, -1, -1, + -1, -1, 908, 909, -1, -1, 912, -1, -1, -1, + 916, -1, -1, -1, -1, -1, -1, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 773, -1, + -1, -1, -1, -1, -1, -1, 781, 782, -1, -1, + -1, -1, -1, 788, -1, -1, -1, -1, -1, 794, + 795, -1, -1, -1, -1, 800, 801, -1, 72, 73, + 74, 75, 76, 77, 78, -1, 80, 81, 974, 814, + 976, -1, -1, 979, 88, 89, -1, -1, -1, -1, + -1, 826, 827, -1, -1, -1, -1, 101, -1, 834, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, 846, 847, -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - -1, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, -1, -1, 88, 89, -1, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, -1, -1, -1, -1, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, + -1, -1, -1, 898, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 908, 909, -1, -1, -1, -1, -1, + 122, 916, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 0, 1, -1, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, -1, -1, -1, -1, -1, -1, + 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, + -1, 30, 31, 32, 33, 34, 35, 36, -1, 974, + 39, 976, -1, -1, 979, -1, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, + 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, + 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, + -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, + -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, + -1, 110, 111, 112, 0, 114, 115, -1, -1, 118, + 119, -1, -1, -1, -1, -1, -1, 13, 14, 15, + 16, 17, 18, -1, 20, 134, 135, 136, -1, -1, + -1, 27, 28, 29, -1, -1, -1, 146, -1, 148, + -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 101, -1, -1, -1, 896, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 906, 907, -1, -1, -1, -1, - -1, 122, 914, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 0, 1, -1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, -1, -1, -1, -1, -1, - -1, 19, -1, 21, 22, 23, 24, -1, -1, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, - 972, 39, 974, -1, -1, 977, -1, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, - 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, - -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, - -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, - 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, - 108, -1, 110, 111, 112, 0, 114, 115, -1, -1, - 118, 119, -1, -1, -1, -1, -1, -1, 13, 14, - 15, 16, 17, 18, -1, 20, 134, 135, 136, -1, - -1, -1, 27, 28, 29, -1, -1, -1, 146, -1, - 148, -1, 37, 38, -1, 40, 41, 42, 43, 44, + -1, 57, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, + -1, -1, 88, 89, 90, -1, -1, 93, -1, -1, + -1, -1, -1, 99, -1, 101, -1, -1, -1, 105, + -1, -1, -1, -1, -1, -1, -1, 113, -1, 115, + -1, -1, 118, 119, -1, -1, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 0, -1, -1, 139, 140, 141, 142, -1, -1, 145, + 146, 147, 148, 13, 14, 15, 16, 17, 18, -1, + 20, -1, -1, -1, -1, -1, 26, 27, 28, -1, + -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, + 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 57, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, -1, -1, 88, 89, 90, -1, -1, 93, -1, - -1, -1, -1, -1, 99, -1, 101, -1, -1, -1, - 105, -1, -1, -1, -1, -1, -1, -1, 113, -1, - 115, -1, -1, 118, 119, -1, -1, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - -1, 0, -1, -1, 139, 140, 141, 142, -1, -1, - 145, 146, 147, 148, 13, 14, 15, 16, 17, 18, - -1, 20, -1, -1, -1, -1, -1, 26, 27, 28, - -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, - -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, -1, -1, -1, -1, 88, 89, + 90, -1, -1, 93, -1, -1, -1, -1, -1, 99, + -1, 101, -1, -1, -1, 105, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 115, -1, -1, 118, 119, + -1, -1, 122, -1, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 0, -1, 138, 139, + 140, 141, 142, -1, 144, 145, 146, 147, 148, 13, + 14, 15, 16, 17, 18, -1, 20, -1, -1, -1, + -1, -1, -1, 27, 28, -1, -1, -1, -1, -1, + -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 57, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + -1, -1, -1, -1, 88, 89, 90, -1, 92, 93, + -1, -1, -1, -1, -1, 99, -1, 101, -1, -1, + -1, 105, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 115, -1, -1, 118, 119, -1, 121, 122, -1, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 0, -1, -1, 139, 140, 141, 142, -1, + -1, 145, 146, 147, 148, 13, 14, 15, 16, 17, + 18, -1, 20, -1, -1, -1, -1, -1, 26, 27, + 28, -1, -1, -1, -1, -1, -1, -1, -1, 37, + 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, - 89, 90, -1, -1, 93, -1, -1, -1, -1, -1, - 99, -1, 101, -1, -1, -1, 105, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 115, -1, -1, 118, - 119, -1, -1, 122, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, -1, -1, 0, -1, 138, - 139, 140, 141, 142, -1, 144, 145, 146, 147, 148, - 13, 14, 15, 16, 17, 18, -1, 20, -1, -1, - -1, -1, -1, -1, 27, 28, -1, -1, -1, -1, - -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, - 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 57, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, -1, -1, -1, -1, 88, 89, 90, -1, 92, - 93, -1, -1, -1, -1, -1, 99, -1, 101, -1, - -1, -1, 105, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 115, -1, -1, 118, 119, -1, 121, 122, - -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, -1, -1, 0, -1, -1, 139, 140, 141, 142, - -1, -1, 145, 146, 147, 148, 13, 14, 15, 16, - 17, 18, -1, 20, -1, -1, -1, -1, -1, 26, - 27, 28, -1, -1, -1, -1, -1, -1, -1, -1, - 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, + 88, 89, 90, -1, -1, 93, -1, -1, -1, -1, + -1, 99, -1, 101, -1, -1, -1, 105, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 115, -1, -1, + 118, 119, -1, -1, 122, -1, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, -1, -1, 0, -1, + 138, 139, 140, 141, 142, -1, 144, 145, 146, 147, + 148, 13, 14, 15, 16, 17, 18, -1, 20, -1, + -1, -1, -1, -1, -1, 27, 28, -1, -1, -1, + -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, + 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, - -1, 88, 89, 90, -1, -1, 93, -1, -1, -1, - -1, -1, 99, -1, 101, -1, -1, -1, 105, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 115, -1, - -1, 118, 119, -1, -1, 122, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, -1, -1, 0, - -1, 138, 139, 140, 141, 142, -1, 144, 145, 146, - 147, 148, 13, 14, 15, 16, 17, 18, -1, 20, - -1, -1, -1, -1, -1, -1, 27, 28, -1, -1, - -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, - 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, -1, -1, -1, -1, 88, 89, 90, -1, + -1, 93, -1, -1, -1, -1, -1, 99, -1, 101, + -1, -1, -1, 105, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 115, -1, -1, 118, 119, -1, -1, + 122, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, -1, -1, 0, -1, -1, 139, 140, 141, + 142, -1, 144, 145, 146, 147, 148, 13, 14, 15, + -1, 17, 18, -1, 20, -1, -1, -1, -1, -1, + 26, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, -1, -1, -1, -1, 88, 89, 90, - -1, -1, 93, -1, -1, -1, -1, -1, 99, -1, - 101, -1, -1, -1, 105, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 115, -1, -1, 118, 119, -1, - -1, 122, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, -1, 0, -1, -1, 139, 140, - 141, 142, -1, 144, 145, 146, 147, 148, 13, 14, - 15, -1, 17, 18, -1, 20, -1, -1, -1, -1, - -1, 26, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, + -1, -1, 88, 89, 90, -1, 92, 93, -1, -1, + -1, -1, -1, -1, -1, 101, -1, -1, -1, 105, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, + -1, -1, 118, 119, -1, 121, 122, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, -1, + 0, -1, 138, 139, 140, -1, 142, -1, -1, 145, + 146, 147, 148, 13, 14, 15, -1, 17, 18, -1, + 20, -1, -1, -1, -1, -1, 26, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 37, 38, -1, + 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, -1, -1, 88, 89, 90, -1, 92, 93, -1, - -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, - 105, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 115, -1, -1, 118, 119, -1, 121, 122, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - -1, 0, -1, 138, 139, 140, -1, 142, -1, -1, - 145, 146, 147, 148, 13, 14, 15, -1, 17, 18, - -1, 20, -1, -1, -1, -1, -1, 26, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 37, 38, - -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, -1, -1, -1, -1, 88, 89, + 90, -1, 92, 93, -1, -1, -1, -1, -1, -1, + -1, 101, -1, -1, -1, 105, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 115, -1, -1, 118, 119, + -1, 121, 122, -1, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, -1, -1, 0, -1, 138, 139, + 140, -1, 142, -1, -1, 145, 146, 147, 148, 13, + 14, 15, -1, 17, 18, -1, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, - 89, 90, -1, 92, 93, -1, -1, -1, -1, -1, - -1, -1, 101, -1, -1, -1, 105, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 115, -1, -1, 118, - 119, -1, 121, 122, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, -1, -1, 0, -1, 138, - 139, 140, -1, 142, -1, -1, 145, 146, 147, 148, - 13, 14, 15, -1, 17, 18, -1, 20, -1, -1, + -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, - 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + -1, -1, -1, -1, 88, 89, 90, -1, 92, 93, + -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, + -1, 105, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 115, -1, -1, 118, 119, -1, 121, 122, -1, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + -1, -1, 0, -1, -1, 139, 140, -1, 142, -1, + -1, 145, 146, 147, 148, 13, 14, 15, -1, 17, + 18, -1, 20, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 37, + 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, -1, -1, -1, -1, 88, 89, 90, -1, 92, - 93, -1, -1, -1, -1, -1, -1, -1, 101, -1, - -1, -1, 105, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 115, -1, -1, 118, 119, -1, 121, 122, - -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, -1, -1, 0, -1, -1, 139, 140, -1, 142, - -1, -1, 145, 146, 147, 148, 13, 14, 15, -1, - 17, 18, -1, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, + -1, -1, -1, -1, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, + 88, 89, 90, -1, 92, 93, -1, -1, -1, -1, + -1, -1, -1, 101, -1, -1, -1, 105, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 115, -1, -1, + 118, 119, -1, 121, 122, -1, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, -1, -1, -1, -1, + -1, 139, 140, -1, 142, -1, -1, 145, 146, 147, + 148, 1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, -1, -1, 18, 19, + -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, 115, -1, -1, 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 134, 135, 136, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 146, 1, 148, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, + -1, 15, -1, 17, 18, 19, -1, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, - -1, 88, 89, 90, -1, 92, 93, -1, -1, -1, - -1, -1, -1, -1, 101, -1, -1, -1, 105, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 115, -1, - -1, 118, 119, -1, 121, 122, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, -1, -1, -1, - -1, -1, 139, 140, -1, 142, -1, -1, 145, 146, - 147, 148, 1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, -1, -1, 18, - 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, 45, -1, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, 115, -1, -1, 118, - 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 134, 135, 136, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 146, 1, 148, + 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, 115, -1, -1, 118, 119, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 134, 135, 136, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 146, 1, 148, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, -1, -1, 15, -1, -1, + 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, 45, -1, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, 115, -1, -1, + 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 134, 135, 136, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 146, 1, + 148, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, -1, -1, 15, -1, -1, 18, 19, -1, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, + -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, 115, -1, -1, 118, 119, 1, -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - -1, -1, 15, -1, 17, 18, 19, -1, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, + -1, -1, 134, 135, 136, -1, 19, -1, 21, 22, + 23, 24, -1, -1, 146, -1, 148, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, + -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -4144,10 +4227,10 @@ static const yytype_int16 yycheck[] = -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, -1, 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 134, 135, 136, -1, -1, -1, -1, -1, -1, + -1, 134, 135, 136, -1, -1, 139, -1, -1, -1, -1, -1, -1, 146, 1, 148, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, -1, -1, 15, -1, - -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, + 7, 8, 9, 10, 11, 12, -1, 14, 15, -1, + -1, -1, 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, @@ -4157,62 +4240,9 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, - -1, 118, 119, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 134, 135, 136, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 146, - 1, 148, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, -1, -1, 15, -1, -1, 18, 19, -1, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, - 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, - -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, 115, -1, -1, 118, 119, 1, - -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, -1, -1, 134, 135, 136, -1, 19, -1, 21, - 22, 23, 24, -1, -1, 146, -1, 148, 30, 31, - 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, - -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, - -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, - -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, - -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, - 112, -1, 114, 115, -1, -1, 118, 119, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 134, 135, 136, -1, -1, 139, -1, -1, - -1, -1, -1, -1, 146, 1, 148, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, -1, 14, 15, - -1, -1, -1, 19, -1, 21, 22, 23, 24, -1, - -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, - 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, - -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, - 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, - -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, - -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, - 106, 107, 108, -1, 110, 111, 112, -1, 114, 115, - -1, -1, 118, 119, 1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, -1, -1, 134, 135, - 136, -1, 19, -1, 21, 22, 23, 24, -1, -1, - 146, -1, 148, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, 45, -1, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, -1, 118, 119, 1, -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, 134, 135, 136, - -1, 19, -1, 21, 22, 23, 24, -1, 145, 146, + -1, 19, -1, 21, 22, 23, 24, -1, -1, 146, -1, 148, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, @@ -4234,26 +4264,26 @@ static const yytype_int16 yycheck[] = -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, -1, 118, - 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 134, 135, 136, -1, -1, - 139, -1, -1, -1, -1, -1, -1, 146, 1, 148, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - -1, -1, 15, -1, -1, -1, 19, -1, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, + 119, 1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, -1, -1, 134, 135, 136, -1, 19, + -1, 21, 22, 23, 24, -1, 145, 146, -1, 148, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, 45, -1, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, 115, -1, -1, 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, 100, -1, -1, - -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, 115, -1, -1, 118, 119, -1, -1, 3, + -1, -1, -1, -1, 134, 135, 136, -1, -1, 139, + -1, -1, -1, -1, -1, -1, 146, 1, 148, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, - -1, 134, 135, 136, -1, 19, -1, 21, 22, 23, - 24, -1, -1, 146, -1, 148, 30, 31, 32, 33, + -1, 15, -1, -1, -1, 19, -1, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, - -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, + -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -4265,7 +4295,7 @@ static const yytype_int16 yycheck[] = 134, 135, 136, -1, 19, -1, 21, 22, 23, 24, -1, -1, 146, -1, 148, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, @@ -4273,16 +4303,16 @@ static const yytype_int16 yycheck[] = 95, -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, -1, 118, 119, -1, -1, 3, 4, 5, - 6, 7, 8, 9, 10, 11, -1, -1, -1, 134, + 6, 7, 8, 9, 10, 11, 12, -1, -1, 134, 135, 136, -1, 19, -1, 21, 22, 23, 24, -1, -1, 146, -1, 148, 30, 31, 32, 33, 34, 35, - 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, - -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, + -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, - -1, 97, 98, -1, -1, -1, -1, -1, 104, -1, + -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, -1, 118, 119, -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, 134, 135, @@ -4296,64 +4326,64 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, -1, -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, 115, -1, - -1, 118, 119, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 134, 135, 136, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 146, - -1, 148, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, - -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, - 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, - 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, - 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 118, 119, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, 134, 135, 136, + -1, 19, -1, 21, 22, 23, 24, -1, -1, 146, + -1, 148, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, -1, -1, -1, -1, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, 115, -1, -1, + 118, 119, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 134, 135, 136, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 146, -1, + 148, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, + -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, + -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, 135, 136, -1, -1, -1, -1, - -1, -1, 143, 144, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, - 19, -1, 21, 22, 23, 24, -1, 26, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, 100, -1, 102, 103, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, + -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, -1, 135, 136, -1, -1, -1, -1, -1, + -1, 143, 144, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, -1, -1, -1, 19, + -1, 21, 22, 23, 24, -1, 26, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + 100, -1, 102, 103, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 134, 135, 136, -1, 138, - -1, -1, -1, -1, -1, 144, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, -1, - -1, -1, 19, -1, 21, 22, 23, 24, -1, 26, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, 100, -1, 102, 103, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, 134, 135, 136, - 19, 138, 21, 22, 23, 24, -1, 144, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, 92, -1, 94, 95, -1, 97, 98, - -1, 100, -1, 102, 103, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, - -1, -1, 121, 3, 4, 5, 6, 7, 8, 9, - 10, 11, -1, -1, -1, 134, 135, 136, -1, 19, - -1, 21, 22, 23, 24, 144, -1, -1, -1, -1, + -1, -1, -1, -1, 134, 135, 136, -1, 138, -1, + -1, -1, -1, -1, 144, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, -1, -1, + -1, 19, -1, 21, 22, 23, 24, -1, 26, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, 100, -1, 102, 103, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, -1, + -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, 134, 135, 136, 19, + 138, 21, 22, 23, 24, -1, 144, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, @@ -4372,24 +4402,50 @@ static const yytype_int16 yycheck[] = -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, + 91, 92, -1, 94, 95, -1, 97, 98, -1, 100, -1, 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, 134, 135, 136, 19, -1, 21, 22, - 23, 24, -1, 144, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, + 121, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, 134, 135, 136, -1, 19, -1, 21, + 22, 23, 24, 144, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, 100, -1, 102, - 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, + 102, 103, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, -1, -1, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, 134, 135, 136, 19, -1, 21, 22, 23, + 24, -1, 144, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 134, 135, 136, -1, -1, -1, -1, -1, -1, - -1, 144, 3, 4, 5, 6, 7, 8, 9, 10, + 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, 100, -1, 102, 103, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 134, 135, 136, -1, -1, -1, -1, -1, -1, -1, + 144, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, + -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, -1, -1, -1, -1, + -1, 63, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, + -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, -1, -1, -1, 107, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, -1, 135, 136, -1, -1, -1, -1, -1, + -1, 143, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, @@ -4408,12 +4464,12 @@ static const yytype_int16 yycheck[] = 20, 21, 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, -1, -1, -1, - -1, -1, -1, 63, -1, -1, -1, -1, -1, -1, + 50, 51, 52, -1, -1, 55, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 100, 101, 102, -1, -1, -1, -1, 107, -1, -1, + 100, 101, 102, -1, -1, -1, 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, 135, 136, -1, -1, -1, @@ -4427,512 +4483,457 @@ static const yytype_int16 yycheck[] = -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 100, 101, 102, -1, -1, -1, 106, -1, -1, + -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, 135, 136, -1, -1, -1, -1, -1, -1, 143, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, - -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, -1, -1, -1, -1, -1, 45, 46, 47, - 48, 49, 50, 51, 52, -1, -1, 55, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, - -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, - 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, + 8, 9, 10, 11, -1, -1, -1, -1, -1, -1, + -1, 19, -1, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, -1, 135, 136, -1, - -1, -1, -1, -1, -1, 143, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, -1, - -1, -1, 19, -1, 21, 22, 23, 24, -1, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, -1, -1, -1, -1, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, -1, -1, -1, 19, 134, 21, 22, 23, + 24, -1, -1, -1, 142, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, -1, -1, -1, -1, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, -1, -1, -1, 19, 134, 21, 22, - 23, 24, -1, -1, -1, 142, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, -1, -1, -1, -1, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, -1, -1, -1, -1, -1, -1, 19, + 134, 21, 22, 23, 24, -1, -1, -1, 142, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, -1, -1, -1, -1, -1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, -1, -1, -1, 134, 135, 136, 19, -1, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, 45, -1, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, -1, -1, -1, - -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, -1, -1, -1, -1, -1, -1, - 19, 134, 21, 22, 23, 24, -1, -1, -1, 142, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, -1, -1, -1, 134, 135, 136, 19, -1, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, 45, -1, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, - 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, - -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, 134, 135, 136, 19, -1, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, + -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, -1, -1, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, 134, 135, 136, 19, -1, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, 100, -1, 102, - 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, -1, -1, -1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, - -1, 134, 135, 136, 19, -1, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, - 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, 100, -1, 102, 103, 104, - -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, - -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, 134, - 135, 136, 19, -1, 21, 22, 23, 24, -1, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, 100, -1, 102, 103, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, 134, 135, 136, - 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, 100, -1, 102, 103, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, -1, -1, -1, 134, 135, 136, 19, -1, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, - 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, - -1, 102, -1, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, 134, 135, 136, 19, -1, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, + 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, 100, -1, 102, 103, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, -1, -1, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, + 134, 135, 136, 19, -1, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, + -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, 100, -1, 102, 103, 104, -1, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, 134, 135, + 136, 19, -1, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, 100, -1, 102, 103, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, -1, + -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, 134, 135, 136, 19, + -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + 100, -1, 102, 103, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, -1, -1, -1, -1, -1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, -1, 134, 135, 136, 19, -1, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, -1, -1, 102, - 103, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, -1, -1, -1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, - -1, 134, 135, 136, 19, -1, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, - 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, 100, -1, 102, -1, 104, - -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, - -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, 134, - 135, 136, 19, -1, 21, 22, 23, 24, -1, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, -1, -1, 102, -1, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, 134, 135, 136, - 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, 100, -1, -1, -1, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, -1, -1, -1, 134, 135, 136, 19, -1, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, - 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, - -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, 134, 135, 136, 19, -1, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, + 102, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, -1, -1, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, 134, 135, 136, 19, -1, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, 100, -1, -1, - -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, -1, -1, -1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, - -1, 134, 135, 136, 19, -1, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 84, - 85, -1, -1, -1, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, 100, -1, -1, -1, 104, - -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, - -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, 134, - 135, 136, 19, -1, 21, 22, 23, 24, -1, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 84, 85, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, 134, 135, 136, - 19, -1, 21, 22, 23, 24, -1, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 84, 85, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, -1, -1, -1, -1, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, -1, -1, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, -1, -1, -1, 134, 135, 136, 19, -1, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, 70, - 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 84, 85, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, -1, - -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, 134, 135, 136, 19, -1, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, + 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, -1, -1, 102, 103, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, -1, -1, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, + 134, 135, 136, 19, -1, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, + -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, 100, -1, 102, -1, 104, -1, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, 134, 135, + 136, 19, -1, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, -1, -1, 102, -1, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, -1, + -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, 134, 135, 136, 19, + -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + 100, -1, -1, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, -1, -1, -1, -1, -1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, -1, 134, 135, 136, 19, -1, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 84, 85, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, -1, -1, -1, - -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, -1, -1, -1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, - -1, 134, 135, 136, 19, -1, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, + -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, -1, -1, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, 134, 135, 136, 19, -1, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 88, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, -1, -1, -1, -1, 104, - -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, -1, -1, -1, -1, -1, -1, 19, 134, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, -1, + 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, 100, -1, -1, -1, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, -1, -1, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, + 134, 135, 136, 19, -1, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 84, 85, + -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, 100, -1, -1, -1, 104, -1, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, 134, 135, + 136, 19, -1, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 84, 85, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, -1, + -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, 134, 135, 136, 19, + -1, 21, 22, 23, 24, -1, -1, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, + 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 84, 85, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + -1, -1, -1, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, -1, -1, -1, -1, -1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, -1, 134, 135, 136, 19, -1, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 84, 85, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, -1, -1, + -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, -1, -1, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, 134, 135, 136, 19, -1, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, 70, 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, 100, - -1, -1, -1, 104, -1, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, -1, -1, -1, -1, -1, - -1, -1, 19, 134, 21, 22, 23, 24, -1, -1, - -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, - -1, -1, 39, -1, -1, -1, -1, -1, -1, -1, - -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, - -1, 58, 59, 60, -1, -1, 63, -1, -1, 66, - 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, + 84, 85, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, -1, -1, -1, -1, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, -1, -1, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, + 134, 135, 136, 19, -1, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 91, -1, -1, 94, 95, -1, - 97, 98, -1, 100, -1, -1, -1, 104, -1, 106, - 107, 108, -1, 110, 111, 112, -1, 114, -1, -1, - 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, - -1, -1, -1, -1, -1, -1, 19, 134, 21, 22, - 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, - 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, - -1, -1, -1, -1, -1, 48, 49, 50, 51, 52, - 53, 54, 55, 56, -1, 58, 59, 60, -1, -1, - 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, + -1, -1, 88, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, -1, -1, -1, -1, 104, -1, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, -1, -1, -1, -1, 19, 134, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, - -1, 94, 95, -1, 97, 98, -1, -1, -1, -1, - -1, 104, -1, 106, 107, 108, -1, 110, 111, 112, - -1, 114, -1, -1, 3, 4, 5, 6, 7, 8, - 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, - 19, 134, 21, 22, 23, 24, -1, -1, -1, -1, - -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, - 39, -1, -1, -1, -1, -1, -1, -1, -1, 48, - 49, 50, 51, 52, 53, 54, 55, 56, -1, 58, - 59, 60, -1, -1, 63, -1, -1, 66, 67, -1, - 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, 100, -1, + -1, -1, 104, -1, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, -1, -1, -1, -1, -1, + -1, 19, 134, 21, 22, 23, 24, -1, -1, -1, + -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, + -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, + 48, 49, 50, 51, 52, 53, 54, 55, 56, -1, + 58, 59, 60, -1, -1, 63, -1, -1, 66, 67, + -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 91, -1, -1, 94, 95, -1, 97, 98, - -1, -1, -1, -1, -1, 104, -1, 106, 107, 108, - -1, 110, 111, 112, -1, 114, -1, -1, 3, 4, - 5, 6, 7, 8, 9, 10, 11, -1, -1, -1, - -1, -1, -1, -1, 19, 134, 21, 22, 23, 24, - -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, - 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, - -1, -1, -1, 48, 49, 50, 51, 52, 53, 54, - 55, 56, -1, 58, 59, 60, -1, -1, 63, -1, - -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, + -1, -1, -1, 91, -1, -1, 94, 95, -1, 97, + 98, -1, 100, -1, -1, -1, 104, -1, 106, 107, + 108, -1, 110, 111, 112, -1, 114, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, -1, + -1, -1, -1, -1, -1, 19, 134, 21, 22, 23, + 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, + 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49, 50, 51, 52, 53, + 54, 55, 56, -1, 58, 59, 60, -1, -1, 63, + -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 91, -1, -1, 94, - 95, -1, 97, 98, -1, -1, -1, -1, -1, 104, - -1, 106, 107, 108, -1, 110, 111, 112, -1, 114, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - 11, -1, -1, -1, -1, -1, -1, -1, 19, 134, - 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, - 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, - -1, -1, -1, -1, -1, -1, -1, 48, 49, 50, - 51, 52, 53, 54, 55, 56, -1, 58, 59, 60, - -1, -1, 63, -1, -1, 66, 67, -1, 69, -1, + -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, + 94, 95, -1, 97, 98, -1, -1, -1, -1, -1, + 104, -1, 106, 107, 108, -1, 110, 111, 112, -1, + 114, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, -1, -1, -1, -1, -1, -1, 19, + 134, 21, 22, 23, 24, -1, -1, -1, -1, -1, + 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, + -1, -1, -1, -1, -1, -1, -1, -1, 48, 49, + 50, 51, 52, 53, 54, 55, 56, -1, 58, 59, + 60, -1, -1, 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 91, -1, -1, 94, 95, -1, 97, 98, -1, -1, - 51, 52, -1, 104, 55, 106, 107, 108, -1, 110, - 111, 112, -1, 114, -1, -1, -1, -1, -1, 70, - 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, - 81, -1, -1, 134, -1, 86, 87, 88, 89, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, - 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 91, -1, -1, 94, 95, -1, 97, 98, -1, + -1, -1, -1, -1, 104, -1, 106, 107, 108, -1, + 110, 111, 112, -1, 114, -1, -1, 3, 4, 5, + 6, 7, 8, 9, 10, 11, -1, -1, -1, -1, + -1, -1, -1, 19, 134, 21, 22, 23, 24, -1, + -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, + 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, + -1, -1, 48, 49, 50, 51, 52, 53, 54, 55, + 56, -1, 58, 59, 60, -1, -1, 63, -1, -1, + 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, 135, 136, 51, 52, -1, -1, - 55, -1, 143, 144, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, - 75, 76, 77, -1, -1, 80, 81, -1, -1, -1, - -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 100, 101, 102, -1, -1, + -1, -1, -1, -1, -1, 91, -1, -1, 94, 95, + -1, 97, 98, -1, -1, -1, -1, -1, 104, -1, + 106, 107, 108, -1, 110, 111, 112, -1, 114, -1, + -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, -1, -1, -1, -1, 19, 134, 21, + 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, + 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, + -1, -1, -1, -1, -1, -1, 48, 49, 50, 51, + 52, 53, 54, 55, 56, -1, 58, 59, 60, -1, + -1, 63, -1, -1, 66, 67, -1, 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - 135, 136, 51, 52, -1, -1, 55, -1, 143, 144, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, + -1, -1, 94, 95, -1, 97, 98, -1, -1, 51, + 52, -1, 104, 55, 106, 107, 108, -1, 110, 111, + 112, -1, 114, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, + -1, -1, 134, -1, 86, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, - -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, - 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, + -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, -1, 135, 136, 51, 52, -1, -1, 55, + -1, 143, 144, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, + 76, 77, -1, -1, 80, 81, -1, -1, -1, -1, + 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, -1, 135, 136, 51, 52, - -1, -1, 55, -1, 143, 144, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, - 73, 74, 75, 76, 77, -1, -1, 80, 81, -1, - -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 100, 101, 102, + -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, 135, + 136, 51, 52, -1, -1, 55, -1, 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, + 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, -1, 135, 136, 51, 52, -1, -1, 55, -1, - 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, - 77, -1, -1, 80, 81, -1, -1, -1, -1, 86, - 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, + 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, -1, 135, 136, - 51, 52, -1, -1, 55, -1, 143, 144, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, - 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, - 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, - 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, -1, 135, 136, 51, 52, -1, + -1, 55, -1, 143, 144, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, + 74, 75, 76, 77, -1, -1, 80, 81, -1, -1, + -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, 135, 136, 51, 52, -1, -1, - 55, -1, 143, 144, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, - 75, 76, 77, -1, -1, 80, 81, -1, -1, -1, - -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - 135, 136, 51, 52, -1, -1, 55, -1, 143, 144, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + -1, 135, 136, 51, 52, -1, -1, 55, -1, 143, + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, + -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, + 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, - -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, - 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, -1, 135, 136, 51, + 52, -1, -1, 55, -1, 143, 144, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, + -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, -1, 135, 136, 51, 52, - -1, -1, 55, -1, 143, 144, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, - 73, 74, 75, 76, 77, -1, -1, 80, 81, -1, - -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 100, 101, 102, + -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, -1, 135, 136, 51, 52, -1, -1, 55, + -1, 143, 144, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, + 76, 77, -1, -1, 80, 81, -1, -1, -1, -1, + 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, 135, + 136, 51, 52, -1, -1, 55, -1, 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, -1, 135, 136, 51, 52, -1, -1, 55, -1, - 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, - 77, -1, -1, 80, 81, -1, -1, -1, -1, 86, - 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, + 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, + 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, -1, 135, 136, - 51, 52, -1, -1, 55, -1, 143, 144, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, - 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, - 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, - 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, + 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, 135, 136, 51, 52, -1, -1, - 55, -1, 143, 144, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 70, 71, 72, 73, 74, - 75, 76, 77, -1, -1, 80, 81, -1, -1, -1, - -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 100, 101, 102, -1, -1, + -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, -1, 135, 136, 51, 52, -1, + -1, 55, -1, 143, 144, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 70, 71, 72, 73, + 74, 75, 76, 77, -1, -1, 80, 81, -1, -1, + -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - 135, 136, 51, 52, -1, -1, 55, -1, 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 70, 71, 72, 73, 74, 75, 76, 77, -1, - -1, 80, 81, -1, -1, -1, -1, 86, 87, 88, - 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + -1, 135, 136, 51, 52, -1, -1, 55, -1, 143, + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 70, 71, 72, 73, 74, 75, 76, 77, + -1, -1, 80, 81, -1, -1, -1, -1, 86, 87, + 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, -1, 135, 136, 51, 52, - -1, -1, 55, -1, 143, 144, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 70, 71, 72, - 73, 74, 75, 76, 77, -1, -1, 80, 81, -1, - -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 100, 101, 102, + -1, -1, -1, -1, -1, -1, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, -1, 135, 136, 51, + 52, -1, -1, 55, -1, 143, 144, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 70, 71, + 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, + -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 100, 101, + 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, -1, 135, 136, 51, 52, -1, -1, 55, + -1, 143, 144, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 70, 71, 72, 73, 74, 75, + 76, 77, -1, -1, 80, 81, -1, -1, -1, -1, + 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, -1, 135, 136, 51, 52, -1, -1, 55, -1, - 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 70, 71, 72, 73, 74, 75, 76, - 77, -1, -1, 80, 81, -1, -1, -1, -1, 86, - 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 100, 101, 102, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, -1, 135, + 136, 51, 52, -1, -1, 55, -1, 143, 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, -1, 135, 136, - 51, 52, -1, -1, 55, -1, 143, 144, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 70, - 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, - 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, - 101, 102, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 44, -1, -1, -1, -1, - -1, -1, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, -1, 135, 136, -1, -1, -1, -1, - -1, -1, 143, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, - 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, + 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, + 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 122, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, - -1, 88, 89, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, + 100, 101, 102, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 44, -1, -1, -1, + -1, -1, -1, -1, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, -1, 135, 136, -1, -1, -1, + -1, -1, -1, 143, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, + 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 101, -1, -1, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 122, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, 148, -1, 88, 89, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, + -1, -1, -1, -1, 122, -1, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, + -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 122, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - -1, -1, -1, -1, -1, -1, -1, 142, 72, 73, + -1, -1, -1, -1, -1, -1, 122, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - -1, -1, -1, -1, -1, -1, -1, -1, 142, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, -1, -1, -1, -1, 88, 89, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, - -1, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, -1, -1, -1, -1, -1, -1, -1, -1, 142, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, -1, -1, -1, -1, 88, 89, -1, -1, + 82, 83, -1, -1, 148, -1, 88, 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -4940,37 +4941,51 @@ static const yytype_int16 yycheck[] = 132, 133, -1, -1, -1, -1, -1, -1, -1, -1, 142, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, 89, -1, - -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, -1, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 72, 73, 74, 75, 76, 77, 78, + 131, 132, 133, -1, -1, -1, -1, -1, -1, -1, + -1, 142, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, -1, -1, -1, -1, 88, 89, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 122, -1, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, -1, -1, -1, -1, -1, -1, + -1, -1, 142, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, 88, - 89, -1, -1, -1, 93, -1, -1, -1, -1, -1, + 89, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, -1, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, -1, -1, -1, - -1, 88, 89, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, + 129, 130, 131, 132, 133, -1, -1, -1, -1, -1, + -1, -1, -1, 142, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, -1, -1, -1, -1, + 88, 89, -1, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 122, -1, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, -1, -1, + -1, -1, 88, 89, -1, -1, -1, 93, -1, -1, + -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 122, -1, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + -1, -1, -1, -1, 88, 89, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 122, -1, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, -1, -1, -1, -1, 88, 89, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 122, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, -1, - -1, -1, -1, 88, 89, 72, 73, 74, 75, 76, - 77, 78, -1, 80, 81, -1, 101, -1, -1, -1, - -1, 88, 89, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 101, -1, -1, -1, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, -1, - -1, -1, -1, -1, -1, -1, -1, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 72, 73, 74, - 75, 76, 77, -1, -1, 80, 81, -1, -1, -1, - -1, -1, -1, 88, 89, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133 + -1, -1, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -4987,9 +5002,9 @@ static const yytype_int16 yystos[] = 154, 159, 161, 163, 164, 165, 168, 169, 172, 173, 175, 176, 177, 179, 180, 189, 203, 220, 241, 242, 252, 253, 254, 258, 259, 260, 266, 267, 268, 270, - 271, 272, 273, 274, 275, 311, 324, 154, 21, 22, + 271, 272, 273, 274, 275, 312, 325, 154, 21, 22, 30, 31, 32, 39, 51, 55, 69, 88, 91, 94, - 134, 164, 165, 181, 182, 203, 220, 272, 275, 311, + 134, 164, 165, 181, 182, 203, 220, 272, 275, 312, 182, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30, 31, 32, 33, 34, @@ -4997,93 +5012,93 @@ static const yytype_int16 yystos[] = 50, 51, 52, 55, 70, 71, 72, 73, 74, 75, 76, 77, 80, 81, 86, 87, 88, 89, 100, 101, 102, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 135, 136, 143, 144, 183, 187, 188, 274, 305, + 133, 135, 136, 143, 144, 183, 187, 188, 274, 306, 204, 91, 163, 167, 180, 189, 220, 272, 273, 275, 167, 210, 212, 69, 91, 173, 180, 220, 225, 272, 275, 33, 34, 35, 36, 48, 49, 50, 51, 55, 106, 183, 184, 185, 268, 115, 118, 119, 146, 148, - 167, 262, 263, 264, 317, 321, 322, 323, 51, 100, - 102, 103, 135, 172, 189, 195, 198, 201, 254, 308, - 310, 195, 195, 144, 192, 193, 196, 197, 324, 192, - 196, 144, 318, 322, 184, 155, 138, 189, 220, 189, + 167, 262, 263, 264, 318, 322, 323, 324, 51, 100, + 102, 103, 135, 172, 189, 195, 198, 201, 254, 309, + 311, 195, 195, 144, 192, 193, 196, 197, 325, 192, + 196, 144, 319, 323, 184, 155, 138, 189, 220, 189, 189, 189, 55, 1, 94, 157, 158, 159, 174, 175, - 324, 205, 207, 190, 201, 308, 324, 189, 307, 308, - 324, 91, 142, 179, 220, 272, 275, 208, 53, 54, + 325, 205, 207, 190, 201, 309, 325, 189, 308, 309, + 325, 91, 142, 179, 220, 272, 275, 208, 53, 54, 56, 63, 107, 183, 269, 63, 64, 65, 116, 117, 255, 256, 61, 255, 62, 255, 63, 255, 63, 255, - 58, 59, 168, 189, 189, 317, 323, 40, 41, 42, + 58, 59, 168, 189, 189, 318, 324, 40, 41, 42, 43, 44, 37, 38, 51, 53, 54, 55, 56, 69, 94, 100, 101, 102, 103, 128, 131, 144, 278, 279, - 280, 281, 284, 285, 286, 287, 289, 290, 291, 292, - 294, 295, 296, 299, 300, 301, 302, 303, 278, 279, - 28, 239, 121, 142, 94, 100, 176, 121, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 88, 89, 93, 101, 122, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 90, 105, 140, 147, 315, - 90, 315, 316, 26, 138, 243, 254, 92, 92, 192, - 196, 243, 163, 51, 55, 181, 58, 59, 278, 125, - 276, 90, 140, 315, 219, 306, 90, 147, 314, 156, - 157, 55, 16, 221, 321, 121, 90, 140, 315, 92, - 92, 221, 167, 167, 55, 90, 140, 315, 25, 107, - 142, 265, 317, 115, 264, 20, 246, 321, 57, 309, - 189, 189, 189, 93, 142, 199, 200, 324, 309, 199, - 200, 85, 194, 195, 201, 308, 324, 195, 163, 317, - 319, 163, 160, 138, 157, 90, 315, 92, 159, 174, - 145, 317, 323, 319, 159, 319, 141, 200, 320, 323, - 200, 320, 139, 320, 55, 176, 177, 178, 142, 90, - 140, 315, 144, 237, 289, 63, 255, 257, 261, 262, - 63, 256, 61, 62, 63, 63, 101, 101, 154, 167, - 167, 167, 167, 159, 163, 163, 57, 121, 293, 85, - 289, 294, 121, 156, 189, 142, 304, 324, 51, 142, - 304, 321, 142, 288, 189, 142, 288, 51, 142, 288, - 51, 121, 156, 240, 100, 168, 189, 201, 202, 174, - 142, 179, 142, 161, 162, 168, 180, 189, 191, 202, - 220, 275, 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 51, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, 189, 51, - 52, 55, 187, 192, 312, 313, 194, 201, 51, 52, - 55, 187, 192, 312, 51, 55, 312, 245, 244, 162, - 189, 191, 162, 191, 99, 170, 217, 277, 216, 51, - 55, 181, 312, 194, 312, 156, 163, 166, 15, 13, - 248, 324, 157, 16, 51, 55, 194, 51, 55, 157, - 27, 222, 321, 222, 51, 55, 194, 51, 55, 214, - 186, 157, 246, 189, 201, 15, 261, 189, 189, 318, - 100, 189, 198, 308, 189, 310, 319, 145, 317, 200, - 200, 319, 145, 184, 152, 139, 191, 319, 159, 206, - 308, 176, 178, 51, 55, 194, 51, 55, 289, 209, - 63, 157, 262, 189, 189, 51, 100, 226, 294, 319, - 319, 142, 189, 15, 51, 281, 286, 303, 287, 292, - 299, 301, 294, 296, 301, 51, 294, 189, 15, 79, - 126, 231, 232, 324, 189, 200, 319, 178, 142, 44, - 121, 44, 90, 140, 315, 318, 92, 92, 192, 196, - 141, 200, 92, 92, 193, 196, 193, 196, 231, 231, - 171, 321, 167, 156, 141, 15, 319, 183, 189, 202, - 249, 324, 18, 224, 324, 17, 223, 224, 92, 92, - 141, 92, 92, 224, 211, 213, 141, 167, 184, 139, - 15, 200, 221, 261, 189, 199, 85, 308, 139, 319, - 320, 141, 234, 318, 29, 113, 238, 139, 142, 291, - 319, 142, 85, 44, 304, 142, 288, 142, 288, 142, - 288, 142, 288, 288, 44, 228, 230, 233, 280, 282, - 283, 286, 294, 295, 297, 298, 301, 303, 156, 100, - 189, 178, 159, 189, 51, 55, 194, 51, 55, 57, - 123, 162, 191, 168, 191, 170, 92, 162, 191, 162, - 191, 170, 243, 239, 156, 157, 231, 218, 321, 15, - 93, 250, 324, 157, 14, 251, 324, 167, 15, 92, - 15, 157, 157, 222, 189, 157, 319, 200, 145, 146, - 156, 157, 227, 142, 100, 319, 189, 294, 301, 294, - 294, 189, 234, 234, 91, 220, 142, 304, 304, 142, - 229, 220, 142, 229, 142, 229, 15, 189, 141, 189, - 189, 162, 191, 15, 139, 157, 156, 91, 180, 220, - 272, 275, 221, 157, 221, 15, 15, 215, 224, 246, - 247, 51, 235, 236, 290, 15, 139, 294, 294, 142, - 291, 288, 142, 288, 288, 288, 126, 126, 55, 90, - 282, 286, 142, 228, 229, 298, 301, 294, 297, 301, - 294, 139, 15, 55, 90, 140, 315, 157, 157, 157, - 142, 318, 142, 294, 142, 294, 51, 55, 304, 142, - 229, 142, 229, 142, 229, 142, 229, 229, 51, 55, - 194, 51, 55, 248, 223, 15, 236, 294, 288, 294, - 301, 294, 294, 141, 229, 142, 229, 229, 229, 294, - 229 + 280, 281, 282, 285, 286, 287, 288, 290, 291, 292, + 293, 295, 296, 297, 300, 301, 302, 303, 304, 325, + 279, 280, 28, 239, 121, 142, 94, 100, 176, 121, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 88, 89, 93, 101, 122, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 90, 105, 140, + 147, 316, 90, 316, 317, 26, 138, 243, 254, 92, + 92, 192, 196, 243, 163, 51, 55, 181, 58, 59, + 279, 125, 276, 90, 140, 316, 219, 307, 90, 147, + 315, 156, 157, 55, 16, 221, 322, 121, 90, 140, + 316, 92, 92, 221, 167, 167, 55, 90, 140, 316, + 25, 107, 142, 265, 318, 115, 264, 20, 246, 322, + 57, 310, 189, 189, 189, 93, 142, 199, 200, 325, + 310, 199, 200, 85, 194, 195, 201, 309, 325, 195, + 163, 318, 320, 163, 160, 138, 157, 90, 316, 92, + 159, 174, 145, 318, 324, 320, 159, 320, 141, 200, + 321, 324, 200, 321, 139, 321, 55, 176, 177, 178, + 142, 90, 140, 316, 144, 237, 290, 63, 255, 257, + 261, 262, 63, 256, 61, 62, 63, 63, 101, 101, + 154, 167, 167, 167, 167, 159, 163, 163, 57, 121, + 294, 85, 290, 295, 121, 156, 189, 142, 305, 325, + 51, 142, 305, 322, 142, 289, 189, 142, 289, 51, + 142, 289, 51, 121, 156, 240, 100, 168, 189, 201, + 202, 174, 142, 179, 142, 161, 162, 168, 180, 189, + 191, 202, 220, 275, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, 51, 189, + 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, + 189, 51, 52, 55, 187, 192, 313, 314, 194, 201, + 51, 52, 55, 187, 192, 313, 51, 55, 313, 245, + 244, 162, 189, 191, 162, 191, 99, 170, 217, 277, + 216, 51, 55, 181, 313, 194, 313, 156, 163, 166, + 15, 13, 248, 325, 157, 16, 51, 55, 194, 51, + 55, 157, 27, 222, 322, 222, 51, 55, 194, 51, + 55, 214, 186, 157, 246, 189, 201, 15, 261, 189, + 189, 319, 100, 189, 198, 309, 189, 311, 320, 145, + 318, 200, 200, 320, 145, 184, 152, 139, 191, 320, + 159, 206, 309, 176, 178, 51, 55, 194, 51, 55, + 290, 209, 63, 157, 262, 189, 189, 51, 100, 226, + 295, 320, 320, 142, 189, 15, 51, 282, 287, 304, + 288, 293, 300, 302, 295, 297, 302, 51, 295, 189, + 15, 79, 126, 231, 232, 325, 189, 200, 320, 178, + 142, 44, 121, 44, 90, 140, 316, 319, 92, 92, + 192, 196, 141, 200, 92, 92, 193, 196, 193, 196, + 231, 231, 171, 322, 167, 156, 141, 15, 320, 183, + 189, 202, 249, 325, 18, 224, 325, 17, 223, 224, + 92, 92, 141, 92, 92, 224, 211, 213, 141, 167, + 184, 139, 15, 200, 221, 261, 189, 199, 85, 309, + 139, 320, 321, 141, 234, 319, 29, 113, 238, 139, + 142, 292, 320, 142, 85, 44, 305, 142, 289, 142, + 289, 142, 289, 142, 289, 289, 44, 228, 230, 233, + 281, 283, 284, 287, 295, 296, 298, 299, 302, 304, + 156, 100, 189, 178, 159, 189, 51, 55, 194, 51, + 55, 57, 123, 162, 191, 168, 191, 170, 92, 162, + 191, 162, 191, 170, 243, 239, 156, 157, 231, 218, + 322, 15, 93, 250, 325, 157, 14, 251, 325, 167, + 15, 92, 15, 157, 157, 222, 189, 157, 320, 200, + 145, 146, 156, 157, 227, 142, 100, 320, 189, 295, + 302, 295, 295, 189, 234, 234, 91, 220, 142, 305, + 305, 142, 229, 220, 142, 229, 142, 229, 15, 189, + 141, 189, 189, 162, 191, 15, 139, 157, 156, 91, + 180, 220, 272, 275, 221, 157, 221, 15, 15, 215, + 224, 246, 247, 51, 235, 236, 291, 15, 139, 295, + 295, 142, 292, 289, 142, 289, 289, 289, 126, 126, + 55, 90, 283, 287, 142, 228, 229, 299, 302, 295, + 298, 302, 295, 139, 15, 55, 90, 140, 316, 157, + 157, 157, 142, 319, 142, 295, 142, 295, 51, 55, + 305, 142, 229, 142, 229, 142, 229, 142, 229, 229, + 51, 55, 194, 51, 55, 248, 223, 15, 236, 295, + 289, 295, 302, 295, 295, 141, 229, 142, 229, 229, + 229, 295, 229 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -5138,18 +5153,18 @@ static const yytype_int16 yyr1[] = 267, 267, 268, 269, 269, 269, 269, 269, 269, 270, 270, 271, 271, 271, 271, 272, 272, 272, 272, 272, 273, 273, 274, 274, 274, 274, 274, 274, 274, 274, - 275, 275, 276, 277, 276, 278, 278, 278, 279, 279, - 280, 281, 281, 282, 282, 283, 283, 284, 284, 285, - 285, 286, 286, 287, 287, 287, 287, 288, 288, 289, - 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, - 289, 289, 289, 289, 290, 290, 290, 290, 290, 291, - 291, 292, 293, 292, 294, 294, 295, 296, 297, 298, + 275, 275, 276, 277, 276, 278, 278, 279, 279, 279, + 280, 280, 281, 282, 282, 283, 283, 284, 284, 285, + 285, 286, 286, 287, 287, 288, 288, 288, 288, 289, + 289, 290, 290, 290, 290, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 291, 291, 291, 291, + 291, 292, 292, 293, 294, 293, 295, 295, 296, 297, 298, 299, 299, 300, 300, 301, 301, 302, 302, 303, - 304, 304, 305, 306, 305, 307, 307, 308, 308, 309, - 309, 310, 310, 310, 310, 311, 311, 311, 312, 312, - 312, 312, 313, 313, 313, 314, 314, 315, 315, 316, - 316, 317, 317, 318, 318, 319, 320, 320, 320, 321, - 321, 321, 322, 323, 323, 324 + 303, 304, 305, 305, 306, 307, 306, 308, 308, 309, + 309, 310, 310, 311, 311, 311, 311, 312, 312, 312, + 313, 313, 313, 313, 314, 314, 314, 315, 315, 316, + 316, 317, 317, 318, 318, 319, 319, 320, 321, 321, + 321, 322, 322, 322, 323, 324, 324, 325 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -5204,18 +5219,18 @@ static const yytype_int8 yyr2[] = 1, 4, 2, 1, 1, 1, 1, 1, 2, 2, 3, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 0, 4, 3, 5, 3, 1, 2, - 2, 2, 1, 2, 1, 1, 3, 1, 3, 1, - 1, 2, 1, 4, 2, 2, 1, 2, 0, 6, - 8, 4, 6, 4, 6, 2, 4, 6, 2, 4, - 2, 4, 1, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 4, 1, 3, 2, 2, 2, 1, - 3, 1, 3, 1, 1, 2, 1, 1, 1, 2, - 2, 1, 1, 0, 4, 1, 2, 1, 3, 1, - 2, 3, 3, 3, 2, 1, 1, 1, 1, 1, + 1, 1, 0, 0, 4, 1, 1, 3, 5, 3, + 1, 2, 2, 2, 1, 2, 1, 1, 3, 1, + 3, 1, 1, 2, 1, 4, 2, 2, 1, 2, + 0, 6, 8, 4, 6, 4, 6, 2, 4, 6, + 2, 4, 2, 4, 1, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 4, 1, 3, 2, 2, + 2, 1, 3, 1, 3, 1, 1, 2, 1, 1, + 1, 2, 2, 1, 1, 0, 4, 1, 2, 1, + 3, 1, 2, 3, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 1, 0, 1, 2, 0, 1, 1, 1, - 1, 1, 1, 1, 2, 0 + 1, 1, 1, 0, 1, 0, 1, 2, 0, 1, + 1, 1, 1, 1, 1, 1, 2, 0 }; @@ -5917,86 +5932,86 @@ yyreduce: switch (yyn) { case 2: -#line 1549 "mrbgems/mruby-compiler/core/parse.y" +#line 1565 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_BEG; if (!p->locals) p->locals = cons(0,0); } -#line 5926 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5941 "mrbgems/mruby-compiler/core/y.tab.c" break; case 3: -#line 1554 "mrbgems/mruby-compiler/core/parse.y" +#line 1570 "mrbgems/mruby-compiler/core/parse.y" { p->tree = new_scope(p, (yyvsp[0].nd)); NODE_LINENO(p->tree, (yyvsp[0].nd)); } -#line 5935 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5950 "mrbgems/mruby-compiler/core/y.tab.c" break; case 4: -#line 1561 "mrbgems/mruby-compiler/core/parse.y" +#line 1577 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 5943 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5958 "mrbgems/mruby-compiler/core/y.tab.c" break; case 5: -#line 1567 "mrbgems/mruby-compiler/core/parse.y" +#line 1583 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, 0); } -#line 5951 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5966 "mrbgems/mruby-compiler/core/y.tab.c" break; case 6: -#line 1571 "mrbgems/mruby-compiler/core/parse.y" +#line 1587 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 5960 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5975 "mrbgems/mruby-compiler/core/y.tab.c" break; case 7: -#line 1576 "mrbgems/mruby-compiler/core/parse.y" +#line 1592 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), newline_node((yyvsp[0].nd))); } -#line 5968 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5983 "mrbgems/mruby-compiler/core/y.tab.c" break; case 8: -#line 1580 "mrbgems/mruby-compiler/core/parse.y" +#line 1596 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, 0); } -#line 5976 "mrbgems/mruby-compiler/core/y.tab.c" +#line 5991 "mrbgems/mruby-compiler/core/y.tab.c" break; case 10: -#line 1587 "mrbgems/mruby-compiler/core/parse.y" +#line 1603 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = local_switch(p); nvars_block(p); } -#line 5985 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6000 "mrbgems/mruby-compiler/core/y.tab.c" break; case 11: -#line 1592 "mrbgems/mruby-compiler/core/parse.y" +#line 1608 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "BEGIN not supported"); local_resume(p, (yyvsp[-3].nd)); nvars_unnest(p); (yyval.nd) = 0; } -#line 5996 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6011 "mrbgems/mruby-compiler/core/y.tab.c" break; case 12: -#line 1604 "mrbgems/mruby-compiler/core/parse.y" +#line 1620 "mrbgems/mruby-compiler/core/parse.y" { if ((yyvsp[-2].nd)) { (yyval.nd) = new_rescue(p, (yyvsp[-3].nd), (yyvsp[-2].nd), (yyvsp[-1].nd)); @@ -6018,291 +6033,291 @@ yyreduce: } } } -#line 6022 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6037 "mrbgems/mruby-compiler/core/y.tab.c" break; case 13: -#line 1628 "mrbgems/mruby-compiler/core/parse.y" +#line 1644 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 6030 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6045 "mrbgems/mruby-compiler/core/y.tab.c" break; case 14: -#line 1634 "mrbgems/mruby-compiler/core/parse.y" +#line 1650 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, 0); } -#line 6038 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6053 "mrbgems/mruby-compiler/core/y.tab.c" break; case 15: -#line 1638 "mrbgems/mruby-compiler/core/parse.y" +#line 1654 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 6047 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6062 "mrbgems/mruby-compiler/core/y.tab.c" break; case 16: -#line 1643 "mrbgems/mruby-compiler/core/parse.y" +#line 1659 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), newline_node((yyvsp[0].nd))); } -#line 6055 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6070 "mrbgems/mruby-compiler/core/y.tab.c" break; case 17: -#line 1647 "mrbgems/mruby-compiler/core/parse.y" +#line 1663 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_begin(p, (yyvsp[0].nd)); } -#line 6063 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6078 "mrbgems/mruby-compiler/core/y.tab.c" break; case 18: -#line 1652 "mrbgems/mruby-compiler/core/parse.y" +#line 1668 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_FNAME;} -#line 6069 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6084 "mrbgems/mruby-compiler/core/y.tab.c" break; case 19: -#line 1653 "mrbgems/mruby-compiler/core/parse.y" +#line 1669 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_alias(p, (yyvsp[-2].id), (yyvsp[0].id)); } -#line 6077 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6092 "mrbgems/mruby-compiler/core/y.tab.c" break; case 20: -#line 1657 "mrbgems/mruby-compiler/core/parse.y" +#line 1673 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 6085 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6100 "mrbgems/mruby-compiler/core/y.tab.c" break; case 21: -#line 1661 "mrbgems/mruby-compiler/core/parse.y" +#line 1677 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd), 0); } -#line 6093 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6108 "mrbgems/mruby-compiler/core/y.tab.c" break; case 22: -#line 1665 "mrbgems/mruby-compiler/core/parse.y" +#line 1681 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_unless(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd), 0); } -#line 6101 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6116 "mrbgems/mruby-compiler/core/y.tab.c" break; case 23: -#line 1669 "mrbgems/mruby-compiler/core/parse.y" +#line 1685 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_while(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd)); } -#line 6109 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6124 "mrbgems/mruby-compiler/core/y.tab.c" break; case 24: -#line 1673 "mrbgems/mruby-compiler/core/parse.y" +#line 1689 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_until(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd)); } -#line 6117 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6132 "mrbgems/mruby-compiler/core/y.tab.c" break; case 25: -#line 1677 "mrbgems/mruby-compiler/core/parse.y" +#line 1693 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6125 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6140 "mrbgems/mruby-compiler/core/y.tab.c" break; case 26: -#line 1681 "mrbgems/mruby-compiler/core/parse.y" +#line 1697 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "END not supported"); (yyval.nd) = new_postexe(p, (yyvsp[-1].nd)); } -#line 6134 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6149 "mrbgems/mruby-compiler/core/y.tab.c" break; case 28: -#line 1687 "mrbgems/mruby-compiler/core/parse.y" +#line 1703 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6142 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6157 "mrbgems/mruby-compiler/core/y.tab.c" break; case 29: -#line 1691 "mrbgems/mruby-compiler/core/parse.y" +#line 1707 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd))); } -#line 6150 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6165 "mrbgems/mruby-compiler/core/y.tab.c" break; case 30: -#line 1695 "mrbgems/mruby-compiler/core/parse.y" +#line 1711 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6158 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6173 "mrbgems/mruby-compiler/core/y.tab.c" break; case 31: -#line 1699 "mrbgems/mruby-compiler/core/parse.y" +#line 1715 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_masgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd))); } -#line 6166 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6181 "mrbgems/mruby-compiler/core/y.tab.c" break; case 32: -#line 1703 "mrbgems/mruby-compiler/core/parse.y" +#line 1719 "mrbgems/mruby-compiler/core/parse.y" { node *lhs = new_lvar(p, (yyvsp[0].id)); void_expr_error(p, (yyvsp[-2].nd)); assignable(p, lhs); (yyval.nd) = new_asgn(p, lhs, (yyvsp[-2].nd)); } -#line 6177 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6192 "mrbgems/mruby-compiler/core/y.tab.c" break; case 34: -#line 1713 "mrbgems/mruby-compiler/core/parse.y" +#line 1729 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6185 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6200 "mrbgems/mruby-compiler/core/y.tab.c" break; case 35: -#line 1717 "mrbgems/mruby-compiler/core/parse.y" +#line 1733 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, (yyvsp[-2].nd), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6193 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6208 "mrbgems/mruby-compiler/core/y.tab.c" break; case 36: -#line 1721 "mrbgems/mruby-compiler/core/parse.y" +#line 1737 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), intern_op(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6201 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6216 "mrbgems/mruby-compiler/core/y.tab.c" break; case 37: -#line 1725 "mrbgems/mruby-compiler/core/parse.y" +#line 1741 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6209 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6224 "mrbgems/mruby-compiler/core/y.tab.c" break; case 38: -#line 1729 "mrbgems/mruby-compiler/core/parse.y" +#line 1745 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6217 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6232 "mrbgems/mruby-compiler/core/y.tab.c" break; case 39: -#line 1733 "mrbgems/mruby-compiler/core/parse.y" +#line 1749 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "constant re-assignment"); (yyval.nd) = 0; } -#line 6226 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6241 "mrbgems/mruby-compiler/core/y.tab.c" break; case 40: -#line 1738 "mrbgems/mruby-compiler/core/parse.y" +#line 1754 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, tCOLON2), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6234 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6249 "mrbgems/mruby-compiler/core/y.tab.c" break; case 41: -#line 1742 "mrbgems/mruby-compiler/core/parse.y" +#line 1758 "mrbgems/mruby-compiler/core/parse.y" { backref_error(p, (yyvsp[-2].nd)); (yyval.nd) = new_begin(p, 0); } -#line 6243 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6258 "mrbgems/mruby-compiler/core/y.tab.c" break; case 43: -#line 1750 "mrbgems/mruby-compiler/core/parse.y" +#line 1766 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6251 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6266 "mrbgems/mruby-compiler/core/y.tab.c" break; case 46: -#line 1759 "mrbgems/mruby-compiler/core/parse.y" +#line 1775 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_and(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6259 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6274 "mrbgems/mruby-compiler/core/y.tab.c" break; case 47: -#line 1763 "mrbgems/mruby-compiler/core/parse.y" +#line 1779 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_or(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6267 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6282 "mrbgems/mruby-compiler/core/y.tab.c" break; case 48: -#line 1767 "mrbgems/mruby-compiler/core/parse.y" +#line 1783 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 6275 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6290 "mrbgems/mruby-compiler/core/y.tab.c" break; case 49: -#line 1771 "mrbgems/mruby-compiler/core/parse.y" +#line 1787 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 6283 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6298 "mrbgems/mruby-compiler/core/y.tab.c" break; case 51: -#line 1779 "mrbgems/mruby-compiler/core/parse.y" +#line 1795 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_def(p, (yyvsp[0].id), nint(p->cmdarg_stack), local_switch(p)); p->cmdarg_stack = 0; p->in_def++; nvars_block(p); } -#line 6294 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6309 "mrbgems/mruby-compiler/core/y.tab.c" break; case 52: -#line 1788 "mrbgems/mruby-compiler/core/parse.y" +#line 1804 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_FNAME; } -#line 6302 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6317 "mrbgems/mruby-compiler/core/y.tab.c" break; case 53: -#line 1792 "mrbgems/mruby-compiler/core/parse.y" +#line 1808 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_sdef(p, (yyvsp[-3].nd), (yyvsp[0].id), nint(p->cmdarg_stack), local_switch(p)); p->cmdarg_stack = 0; @@ -6311,1079 +6326,1081 @@ yyreduce: nvars_block(p); p->lstate = EXPR_ENDFN; /* force for args */ } -#line 6315 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6330 "mrbgems/mruby-compiler/core/y.tab.c" break; case 54: -#line 1803 "mrbgems/mruby-compiler/core/parse.y" +#line 1819 "mrbgems/mruby-compiler/core/parse.y" { if (!(yyvsp[0].nd)) (yyval.nd) = new_nil(p); else { (yyval.nd) = (yyvsp[0].nd); } } -#line 6326 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6341 "mrbgems/mruby-compiler/core/y.tab.c" break; case 58: -#line 1817 "mrbgems/mruby-compiler/core/parse.y" +#line 1833 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 6334 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6349 "mrbgems/mruby-compiler/core/y.tab.c" break; case 59: -#line 1823 "mrbgems/mruby-compiler/core/parse.y" +#line 1839 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); } -#line 6343 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6358 "mrbgems/mruby-compiler/core/y.tab.c" break; case 60: -#line 1830 "mrbgems/mruby-compiler/core/parse.y" +#line 1846 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block(p, (yyvsp[-2].nd), (yyvsp[-1].nd)); local_unnest(p); nvars_unnest(p); } -#line 6353 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6368 "mrbgems/mruby-compiler/core/y.tab.c" break; case 61: -#line 1838 "mrbgems/mruby-compiler/core/parse.y" +#line 1854 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 6361 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6376 "mrbgems/mruby-compiler/core/y.tab.c" break; case 62: -#line 1842 "mrbgems/mruby-compiler/core/parse.y" +#line 1858 "mrbgems/mruby-compiler/core/parse.y" { args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = new_fcall(p, (yyvsp[-2].id), (yyvsp[-1].nd)); } -#line 6370 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6385 "mrbgems/mruby-compiler/core/y.tab.c" break; case 63: -#line 1847 "mrbgems/mruby-compiler/core/parse.y" +#line 1863 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 6378 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6393 "mrbgems/mruby-compiler/core/y.tab.c" break; case 64: -#line 1851 "mrbgems/mruby-compiler/core/parse.y" +#line 1867 "mrbgems/mruby-compiler/core/parse.y" { args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num)); } -#line 6387 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6402 "mrbgems/mruby-compiler/core/y.tab.c" break; case 65: -#line 1856 "mrbgems/mruby-compiler/core/parse.y" +#line 1872 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), tCOLON2); } -#line 6395 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6410 "mrbgems/mruby-compiler/core/y.tab.c" break; case 66: -#line 1860 "mrbgems/mruby-compiler/core/parse.y" +#line 1876 "mrbgems/mruby-compiler/core/parse.y" { args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), tCOLON2); } -#line 6404 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6419 "mrbgems/mruby-compiler/core/y.tab.c" break; case 67: -#line 1865 "mrbgems/mruby-compiler/core/parse.y" +#line 1881 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_super(p, (yyvsp[0].nd)); } -#line 6412 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6427 "mrbgems/mruby-compiler/core/y.tab.c" break; case 68: -#line 1869 "mrbgems/mruby-compiler/core/parse.y" +#line 1885 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_yield(p, (yyvsp[0].nd)); } -#line 6420 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6435 "mrbgems/mruby-compiler/core/y.tab.c" break; case 69: -#line 1873 "mrbgems/mruby-compiler/core/parse.y" +#line 1889 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_return(p, ret_args(p, (yyvsp[0].nd))); } -#line 6428 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6443 "mrbgems/mruby-compiler/core/y.tab.c" break; case 70: -#line 1877 "mrbgems/mruby-compiler/core/parse.y" +#line 1893 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_break(p, ret_args(p, (yyvsp[0].nd))); } -#line 6436 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6451 "mrbgems/mruby-compiler/core/y.tab.c" break; case 71: -#line 1881 "mrbgems/mruby-compiler/core/parse.y" +#line 1897 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_next(p, ret_args(p, (yyvsp[0].nd))); } -#line 6444 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6459 "mrbgems/mruby-compiler/core/y.tab.c" break; case 72: -#line 1887 "mrbgems/mruby-compiler/core/parse.y" +#line 1903 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 6452 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6467 "mrbgems/mruby-compiler/core/y.tab.c" break; case 73: -#line 1891 "mrbgems/mruby-compiler/core/parse.y" +#line 1907 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 6460 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6475 "mrbgems/mruby-compiler/core/y.tab.c" break; case 75: -#line 1898 "mrbgems/mruby-compiler/core/parse.y" +#line 1914 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 6468 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6483 "mrbgems/mruby-compiler/core/y.tab.c" break; case 76: -#line 1904 "mrbgems/mruby-compiler/core/parse.y" +#line 1920 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 6476 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6491 "mrbgems/mruby-compiler/core/y.tab.c" break; case 77: -#line 1908 "mrbgems/mruby-compiler/core/parse.y" +#line 1924 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(push((yyvsp[-1].nd),(yyvsp[0].nd))); } -#line 6484 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6499 "mrbgems/mruby-compiler/core/y.tab.c" break; case 78: -#line 1912 "mrbgems/mruby-compiler/core/parse.y" +#line 1928 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6492 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6507 "mrbgems/mruby-compiler/core/y.tab.c" break; case 79: -#line 1916 "mrbgems/mruby-compiler/core/parse.y" +#line 1932 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-4].nd), (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6500 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6515 "mrbgems/mruby-compiler/core/y.tab.c" break; case 80: -#line 1920 "mrbgems/mruby-compiler/core/parse.y" +#line 1936 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2((yyvsp[-1].nd), new_nil(p)); } -#line 6508 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6523 "mrbgems/mruby-compiler/core/y.tab.c" break; case 81: -#line 1924 "mrbgems/mruby-compiler/core/parse.y" +#line 1940 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-3].nd), new_nil(p), (yyvsp[0].nd)); } -#line 6516 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6531 "mrbgems/mruby-compiler/core/y.tab.c" break; case 82: -#line 1928 "mrbgems/mruby-compiler/core/parse.y" +#line 1944 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2(0, (yyvsp[0].nd)); } -#line 6524 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6539 "mrbgems/mruby-compiler/core/y.tab.c" break; case 83: -#line 1932 "mrbgems/mruby-compiler/core/parse.y" +#line 1948 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6532 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6547 "mrbgems/mruby-compiler/core/y.tab.c" break; case 84: -#line 1936 "mrbgems/mruby-compiler/core/parse.y" +#line 1952 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list2(0, new_nil(p)); } -#line 6540 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6555 "mrbgems/mruby-compiler/core/y.tab.c" break; case 85: -#line 1940 "mrbgems/mruby-compiler/core/parse.y" +#line 1956 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, new_nil(p), (yyvsp[0].nd)); } -#line 6548 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6563 "mrbgems/mruby-compiler/core/y.tab.c" break; case 87: -#line 1947 "mrbgems/mruby-compiler/core/parse.y" +#line 1963 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_masgn(p, (yyvsp[-1].nd), NULL); } -#line 6556 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6571 "mrbgems/mruby-compiler/core/y.tab.c" break; case 88: -#line 1953 "mrbgems/mruby-compiler/core/parse.y" +#line 1969 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[-1].nd)); } -#line 6564 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6579 "mrbgems/mruby-compiler/core/y.tab.c" break; case 89: -#line 1957 "mrbgems/mruby-compiler/core/parse.y" +#line 1973 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[-1].nd)); } -#line 6572 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6587 "mrbgems/mruby-compiler/core/y.tab.c" break; case 90: -#line 1963 "mrbgems/mruby-compiler/core/parse.y" +#line 1979 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 6580 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6595 "mrbgems/mruby-compiler/core/y.tab.c" break; case 91: -#line 1967 "mrbgems/mruby-compiler/core/parse.y" +#line 1983 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 6588 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6603 "mrbgems/mruby-compiler/core/y.tab.c" break; case 92: -#line 1973 "mrbgems/mruby-compiler/core/parse.y" +#line 1989 "mrbgems/mruby-compiler/core/parse.y" { assignable(p, (yyvsp[0].nd)); } -#line 6596 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6611 "mrbgems/mruby-compiler/core/y.tab.c" break; case 93: -#line 1977 "mrbgems/mruby-compiler/core/parse.y" +#line 1993 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.'); } -#line 6604 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6619 "mrbgems/mruby-compiler/core/y.tab.c" break; case 94: -#line 1981 "mrbgems/mruby-compiler/core/parse.y" +#line 1997 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 6612 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6627 "mrbgems/mruby-compiler/core/y.tab.c" break; case 95: -#line 1985 "mrbgems/mruby-compiler/core/parse.y" +#line 2001 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 6620 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6635 "mrbgems/mruby-compiler/core/y.tab.c" break; case 96: -#line 1989 "mrbgems/mruby-compiler/core/parse.y" +#line 2005 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 6628 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6643 "mrbgems/mruby-compiler/core/y.tab.c" break; case 97: -#line 1993 "mrbgems/mruby-compiler/core/parse.y" +#line 2009 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "dynamic constant assignment"); (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 6638 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6653 "mrbgems/mruby-compiler/core/y.tab.c" break; case 98: -#line 1999 "mrbgems/mruby-compiler/core/parse.y" +#line 2015 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "dynamic constant assignment"); (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 6648 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6663 "mrbgems/mruby-compiler/core/y.tab.c" break; case 99: -#line 2005 "mrbgems/mruby-compiler/core/parse.y" +#line 2021 "mrbgems/mruby-compiler/core/parse.y" { backref_error(p, (yyvsp[0].nd)); (yyval.nd) = 0; } -#line 6657 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6672 "mrbgems/mruby-compiler/core/y.tab.c" break; case 100: -#line 2012 "mrbgems/mruby-compiler/core/parse.y" +#line 2028 "mrbgems/mruby-compiler/core/parse.y" { assignable(p, (yyvsp[0].nd)); } -#line 6665 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6680 "mrbgems/mruby-compiler/core/y.tab.c" break; case 101: -#line 2016 "mrbgems/mruby-compiler/core/parse.y" +#line 2032 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.'); } -#line 6673 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6688 "mrbgems/mruby-compiler/core/y.tab.c" break; case 102: -#line 2020 "mrbgems/mruby-compiler/core/parse.y" +#line 2036 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 6681 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6696 "mrbgems/mruby-compiler/core/y.tab.c" break; case 103: -#line 2024 "mrbgems/mruby-compiler/core/parse.y" +#line 2040 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 6689 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6704 "mrbgems/mruby-compiler/core/y.tab.c" break; case 104: -#line 2028 "mrbgems/mruby-compiler/core/parse.y" +#line 2044 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num)); } -#line 6697 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6712 "mrbgems/mruby-compiler/core/y.tab.c" break; case 105: -#line 2032 "mrbgems/mruby-compiler/core/parse.y" +#line 2048 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "dynamic constant assignment"); (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 6707 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6722 "mrbgems/mruby-compiler/core/y.tab.c" break; case 106: -#line 2038 "mrbgems/mruby-compiler/core/parse.y" +#line 2054 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "dynamic constant assignment"); (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 6717 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6732 "mrbgems/mruby-compiler/core/y.tab.c" break; case 107: -#line 2044 "mrbgems/mruby-compiler/core/parse.y" +#line 2060 "mrbgems/mruby-compiler/core/parse.y" { backref_error(p, (yyvsp[0].nd)); (yyval.nd) = 0; } -#line 6726 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6741 "mrbgems/mruby-compiler/core/y.tab.c" break; case 108: -#line 2049 "mrbgems/mruby-compiler/core/parse.y" +#line 2065 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "can't assign to numbered parameter"); } -#line 6734 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6749 "mrbgems/mruby-compiler/core/y.tab.c" break; case 109: -#line 2055 "mrbgems/mruby-compiler/core/parse.y" +#line 2071 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "class/module name must be CONSTANT"); } -#line 6742 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6757 "mrbgems/mruby-compiler/core/y.tab.c" break; case 111: -#line 2062 "mrbgems/mruby-compiler/core/parse.y" +#line 2078 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(nint(1), nsym((yyvsp[0].id))); } -#line 6750 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6765 "mrbgems/mruby-compiler/core/y.tab.c" break; case 112: -#line 2066 "mrbgems/mruby-compiler/core/parse.y" +#line 2082 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(nint(0), nsym((yyvsp[0].id))); } -#line 6758 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6773 "mrbgems/mruby-compiler/core/y.tab.c" break; case 113: -#line 2070 "mrbgems/mruby-compiler/core/parse.y" +#line 2086 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[-2].nd)); (yyval.nd) = cons((yyvsp[-2].nd), nsym((yyvsp[0].id))); } -#line 6767 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6782 "mrbgems/mruby-compiler/core/y.tab.c" break; case 117: -#line 2080 "mrbgems/mruby-compiler/core/parse.y" +#line 2096 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_ENDFN; (yyval.id) = (yyvsp[0].id); } -#line 6776 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6791 "mrbgems/mruby-compiler/core/y.tab.c" break; case 118: -#line 2085 "mrbgems/mruby-compiler/core/parse.y" +#line 2101 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_ENDFN; (yyval.id) = (yyvsp[0].id); } -#line 6785 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6800 "mrbgems/mruby-compiler/core/y.tab.c" break; case 121: -#line 2096 "mrbgems/mruby-compiler/core/parse.y" +#line 2112 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_undef(p, (yyvsp[0].id)); } -#line 6793 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6808 "mrbgems/mruby-compiler/core/y.tab.c" break; case 122: -#line 2099 "mrbgems/mruby-compiler/core/parse.y" +#line 2115 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_FNAME;} -#line 6799 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6814 "mrbgems/mruby-compiler/core/y.tab.c" break; case 123: -#line 2100 "mrbgems/mruby-compiler/core/parse.y" +#line 2116 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-3].nd), nsym((yyvsp[0].id))); } -#line 6807 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6822 "mrbgems/mruby-compiler/core/y.tab.c" break; case 124: -#line 2105 "mrbgems/mruby-compiler/core/parse.y" +#line 2121 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(or); } -#line 6813 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6828 "mrbgems/mruby-compiler/core/y.tab.c" break; case 125: -#line 2106 "mrbgems/mruby-compiler/core/parse.y" +#line 2122 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(xor); } -#line 6819 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6834 "mrbgems/mruby-compiler/core/y.tab.c" break; case 126: -#line 2107 "mrbgems/mruby-compiler/core/parse.y" +#line 2123 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(and); } -#line 6825 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6840 "mrbgems/mruby-compiler/core/y.tab.c" break; case 127: -#line 2108 "mrbgems/mruby-compiler/core/parse.y" +#line 2124 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(cmp); } -#line 6831 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6846 "mrbgems/mruby-compiler/core/y.tab.c" break; case 128: -#line 2109 "mrbgems/mruby-compiler/core/parse.y" +#line 2125 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(eq); } -#line 6837 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6852 "mrbgems/mruby-compiler/core/y.tab.c" break; case 129: -#line 2110 "mrbgems/mruby-compiler/core/parse.y" +#line 2126 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(eqq); } -#line 6843 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6858 "mrbgems/mruby-compiler/core/y.tab.c" break; case 130: -#line 2111 "mrbgems/mruby-compiler/core/parse.y" +#line 2127 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(match); } -#line 6849 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6864 "mrbgems/mruby-compiler/core/y.tab.c" break; case 131: -#line 2112 "mrbgems/mruby-compiler/core/parse.y" +#line 2128 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(nmatch); } -#line 6855 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6870 "mrbgems/mruby-compiler/core/y.tab.c" break; case 132: -#line 2113 "mrbgems/mruby-compiler/core/parse.y" +#line 2129 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(gt); } -#line 6861 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6876 "mrbgems/mruby-compiler/core/y.tab.c" break; case 133: -#line 2114 "mrbgems/mruby-compiler/core/parse.y" +#line 2130 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(ge); } -#line 6867 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6882 "mrbgems/mruby-compiler/core/y.tab.c" break; case 134: -#line 2115 "mrbgems/mruby-compiler/core/parse.y" +#line 2131 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(lt); } -#line 6873 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6888 "mrbgems/mruby-compiler/core/y.tab.c" break; case 135: -#line 2116 "mrbgems/mruby-compiler/core/parse.y" +#line 2132 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(le); } -#line 6879 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6894 "mrbgems/mruby-compiler/core/y.tab.c" break; case 136: -#line 2117 "mrbgems/mruby-compiler/core/parse.y" +#line 2133 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(neq); } -#line 6885 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6900 "mrbgems/mruby-compiler/core/y.tab.c" break; case 137: -#line 2118 "mrbgems/mruby-compiler/core/parse.y" +#line 2134 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(lshift); } -#line 6891 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6906 "mrbgems/mruby-compiler/core/y.tab.c" break; case 138: -#line 2119 "mrbgems/mruby-compiler/core/parse.y" +#line 2135 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(rshift); } -#line 6897 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6912 "mrbgems/mruby-compiler/core/y.tab.c" break; case 139: -#line 2120 "mrbgems/mruby-compiler/core/parse.y" +#line 2136 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(add); } -#line 6903 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6918 "mrbgems/mruby-compiler/core/y.tab.c" break; case 140: -#line 2121 "mrbgems/mruby-compiler/core/parse.y" +#line 2137 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(sub); } -#line 6909 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6924 "mrbgems/mruby-compiler/core/y.tab.c" break; case 141: -#line 2122 "mrbgems/mruby-compiler/core/parse.y" +#line 2138 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(mul); } -#line 6915 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6930 "mrbgems/mruby-compiler/core/y.tab.c" break; case 142: -#line 2123 "mrbgems/mruby-compiler/core/parse.y" +#line 2139 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(mul); } -#line 6921 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6936 "mrbgems/mruby-compiler/core/y.tab.c" break; case 143: -#line 2124 "mrbgems/mruby-compiler/core/parse.y" +#line 2140 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(div); } -#line 6927 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6942 "mrbgems/mruby-compiler/core/y.tab.c" break; case 144: -#line 2125 "mrbgems/mruby-compiler/core/parse.y" +#line 2141 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(mod); } -#line 6933 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6948 "mrbgems/mruby-compiler/core/y.tab.c" break; case 145: -#line 2126 "mrbgems/mruby-compiler/core/parse.y" +#line 2142 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(pow); } -#line 6939 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6954 "mrbgems/mruby-compiler/core/y.tab.c" break; case 146: -#line 2127 "mrbgems/mruby-compiler/core/parse.y" +#line 2143 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(pow); } -#line 6945 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6960 "mrbgems/mruby-compiler/core/y.tab.c" break; case 147: -#line 2128 "mrbgems/mruby-compiler/core/parse.y" +#line 2144 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(not); } -#line 6951 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6966 "mrbgems/mruby-compiler/core/y.tab.c" break; case 148: -#line 2129 "mrbgems/mruby-compiler/core/parse.y" +#line 2145 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(neg); } -#line 6957 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6972 "mrbgems/mruby-compiler/core/y.tab.c" break; case 149: -#line 2130 "mrbgems/mruby-compiler/core/parse.y" +#line 2146 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(plus); } -#line 6963 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6978 "mrbgems/mruby-compiler/core/y.tab.c" break; case 150: -#line 2131 "mrbgems/mruby-compiler/core/parse.y" +#line 2147 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(minus); } -#line 6969 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6984 "mrbgems/mruby-compiler/core/y.tab.c" break; case 151: -#line 2132 "mrbgems/mruby-compiler/core/parse.y" +#line 2148 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(aref); } -#line 6975 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6990 "mrbgems/mruby-compiler/core/y.tab.c" break; case 152: -#line 2133 "mrbgems/mruby-compiler/core/parse.y" +#line 2149 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(aset); } -#line 6981 "mrbgems/mruby-compiler/core/y.tab.c" +#line 6996 "mrbgems/mruby-compiler/core/y.tab.c" break; case 153: -#line 2134 "mrbgems/mruby-compiler/core/parse.y" +#line 2150 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = intern_op(tick); } -#line 6987 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7002 "mrbgems/mruby-compiler/core/y.tab.c" break; case 194: -#line 2152 "mrbgems/mruby-compiler/core/parse.y" +#line 2168 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_asgn(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 6995 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7010 "mrbgems/mruby-compiler/core/y.tab.c" break; case 195: -#line 2156 "mrbgems/mruby-compiler/core/parse.y" +#line 2172 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, (yyvsp[-2].nd), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7003 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7018 "mrbgems/mruby-compiler/core/y.tab.c" break; case 196: -#line 2160 "mrbgems/mruby-compiler/core/parse.y" +#line 2176 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), intern_op(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7011 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7026 "mrbgems/mruby-compiler/core/y.tab.c" break; case 197: -#line 2164 "mrbgems/mruby-compiler/core/parse.y" +#line 2180 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7019 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7034 "mrbgems/mruby-compiler/core/y.tab.c" break; case 198: -#line 2168 "mrbgems/mruby-compiler/core/parse.y" +#line 2184 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7027 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7042 "mrbgems/mruby-compiler/core/y.tab.c" break; case 199: -#line 2172 "mrbgems/mruby-compiler/core/parse.y" +#line 2188 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, tCOLON2), (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 7035 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7050 "mrbgems/mruby-compiler/core/y.tab.c" break; case 200: -#line 2176 "mrbgems/mruby-compiler/core/parse.y" +#line 2192 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "constant re-assignment"); (yyval.nd) = new_begin(p, 0); } -#line 7044 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7059 "mrbgems/mruby-compiler/core/y.tab.c" break; case 201: -#line 2181 "mrbgems/mruby-compiler/core/parse.y" +#line 2197 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "constant re-assignment"); (yyval.nd) = new_begin(p, 0); } -#line 7053 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7068 "mrbgems/mruby-compiler/core/y.tab.c" break; case 202: -#line 2186 "mrbgems/mruby-compiler/core/parse.y" +#line 2202 "mrbgems/mruby-compiler/core/parse.y" { backref_error(p, (yyvsp[-2].nd)); (yyval.nd) = new_begin(p, 0); } -#line 7062 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7077 "mrbgems/mruby-compiler/core/y.tab.c" break; case 203: -#line 2191 "mrbgems/mruby-compiler/core/parse.y" +#line 2207 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot2(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7070 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7085 "mrbgems/mruby-compiler/core/y.tab.c" break; case 204: -#line 2195 "mrbgems/mruby-compiler/core/parse.y" +#line 2211 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot2(p, (yyvsp[-1].nd), new_nil(p)); } -#line 7078 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7093 "mrbgems/mruby-compiler/core/y.tab.c" break; case 205: -#line 2199 "mrbgems/mruby-compiler/core/parse.y" +#line 2215 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot2(p, new_nil(p), (yyvsp[0].nd)); } -#line 7086 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7101 "mrbgems/mruby-compiler/core/y.tab.c" break; case 206: -#line 2203 "mrbgems/mruby-compiler/core/parse.y" +#line 2219 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot3(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7094 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7109 "mrbgems/mruby-compiler/core/y.tab.c" break; case 207: -#line 2207 "mrbgems/mruby-compiler/core/parse.y" +#line 2223 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot3(p, (yyvsp[-1].nd), new_nil(p)); } -#line 7102 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7117 "mrbgems/mruby-compiler/core/y.tab.c" break; case 208: -#line 2211 "mrbgems/mruby-compiler/core/parse.y" +#line 2227 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dot3(p, new_nil(p), (yyvsp[0].nd)); } -#line 7110 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7125 "mrbgems/mruby-compiler/core/y.tab.c" break; case 209: -#line 2215 "mrbgems/mruby-compiler/core/parse.y" +#line 2231 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "+", (yyvsp[0].nd)); } -#line 7118 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7133 "mrbgems/mruby-compiler/core/y.tab.c" break; case 210: -#line 2219 "mrbgems/mruby-compiler/core/parse.y" +#line 2235 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "-", (yyvsp[0].nd)); } -#line 7126 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7141 "mrbgems/mruby-compiler/core/y.tab.c" break; case 211: -#line 2223 "mrbgems/mruby-compiler/core/parse.y" +#line 2239 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "*", (yyvsp[0].nd)); } -#line 7134 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7149 "mrbgems/mruby-compiler/core/y.tab.c" break; case 212: -#line 2227 "mrbgems/mruby-compiler/core/parse.y" +#line 2243 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "/", (yyvsp[0].nd)); } -#line 7142 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7157 "mrbgems/mruby-compiler/core/y.tab.c" break; case 213: -#line 2231 "mrbgems/mruby-compiler/core/parse.y" +#line 2247 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "%", (yyvsp[0].nd)); } -#line 7150 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7165 "mrbgems/mruby-compiler/core/y.tab.c" break; case 214: -#line 2235 "mrbgems/mruby-compiler/core/parse.y" +#line 2251 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd)); } -#line 7158 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7173 "mrbgems/mruby-compiler/core/y.tab.c" break; case 215: -#line 2239 "mrbgems/mruby-compiler/core/parse.y" +#line 2255 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd)), "-@"); } -#line 7166 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7181 "mrbgems/mruby-compiler/core/y.tab.c" break; case 216: -#line 2243 "mrbgems/mruby-compiler/core/parse.y" +#line 2259 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd)), "-@"); } -#line 7174 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7189 "mrbgems/mruby-compiler/core/y.tab.c" break; case 217: -#line 2247 "mrbgems/mruby-compiler/core/parse.y" +#line 2263 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, (yyvsp[0].nd), "+@"); } -#line 7182 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7197 "mrbgems/mruby-compiler/core/y.tab.c" break; case 218: -#line 2251 "mrbgems/mruby-compiler/core/parse.y" +#line 2267 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, (yyvsp[0].nd), "-@"); } -#line 7190 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7205 "mrbgems/mruby-compiler/core/y.tab.c" break; case 219: -#line 2255 "mrbgems/mruby-compiler/core/parse.y" +#line 2271 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "|", (yyvsp[0].nd)); } -#line 7198 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7213 "mrbgems/mruby-compiler/core/y.tab.c" break; case 220: -#line 2259 "mrbgems/mruby-compiler/core/parse.y" +#line 2275 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "^", (yyvsp[0].nd)); } -#line 7206 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7221 "mrbgems/mruby-compiler/core/y.tab.c" break; case 221: -#line 2263 "mrbgems/mruby-compiler/core/parse.y" +#line 2279 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "&", (yyvsp[0].nd)); } -#line 7214 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7229 "mrbgems/mruby-compiler/core/y.tab.c" break; case 222: -#line 2267 "mrbgems/mruby-compiler/core/parse.y" +#line 2283 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<=>", (yyvsp[0].nd)); } -#line 7222 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7237 "mrbgems/mruby-compiler/core/y.tab.c" break; case 223: -#line 2271 "mrbgems/mruby-compiler/core/parse.y" +#line 2287 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">", (yyvsp[0].nd)); } -#line 7230 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7245 "mrbgems/mruby-compiler/core/y.tab.c" break; case 224: -#line 2275 "mrbgems/mruby-compiler/core/parse.y" +#line 2291 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">=", (yyvsp[0].nd)); } -#line 7238 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7253 "mrbgems/mruby-compiler/core/y.tab.c" break; case 225: -#line 2279 "mrbgems/mruby-compiler/core/parse.y" +#line 2295 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<", (yyvsp[0].nd)); } -#line 7246 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7261 "mrbgems/mruby-compiler/core/y.tab.c" break; case 226: -#line 2283 "mrbgems/mruby-compiler/core/parse.y" +#line 2299 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<=", (yyvsp[0].nd)); } -#line 7254 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7269 "mrbgems/mruby-compiler/core/y.tab.c" break; case 227: -#line 2287 "mrbgems/mruby-compiler/core/parse.y" +#line 2303 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "==", (yyvsp[0].nd)); } -#line 7262 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7277 "mrbgems/mruby-compiler/core/y.tab.c" break; case 228: -#line 2291 "mrbgems/mruby-compiler/core/parse.y" +#line 2307 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "===", (yyvsp[0].nd)); } -#line 7270 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7285 "mrbgems/mruby-compiler/core/y.tab.c" break; case 229: -#line 2295 "mrbgems/mruby-compiler/core/parse.y" +#line 2311 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "!=", (yyvsp[0].nd)); } -#line 7278 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7293 "mrbgems/mruby-compiler/core/y.tab.c" break; case 230: -#line 2299 "mrbgems/mruby-compiler/core/parse.y" +#line 2315 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "=~", (yyvsp[0].nd)); } -#line 7286 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7301 "mrbgems/mruby-compiler/core/y.tab.c" break; case 231: -#line 2303 "mrbgems/mruby-compiler/core/parse.y" +#line 2319 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "!~", (yyvsp[0].nd)); } -#line 7294 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7309 "mrbgems/mruby-compiler/core/y.tab.c" break; case 232: -#line 2307 "mrbgems/mruby-compiler/core/parse.y" +#line 2323 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!"); } -#line 7302 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7317 "mrbgems/mruby-compiler/core/y.tab.c" break; case 233: -#line 2311 "mrbgems/mruby-compiler/core/parse.y" +#line 2327 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "~"); } -#line 7310 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7325 "mrbgems/mruby-compiler/core/y.tab.c" break; case 234: -#line 2315 "mrbgems/mruby-compiler/core/parse.y" +#line 2331 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<<", (yyvsp[0].nd)); } -#line 7318 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7333 "mrbgems/mruby-compiler/core/y.tab.c" break; case 235: -#line 2319 "mrbgems/mruby-compiler/core/parse.y" +#line 2335 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">>", (yyvsp[0].nd)); } -#line 7326 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7341 "mrbgems/mruby-compiler/core/y.tab.c" break; case 236: -#line 2323 "mrbgems/mruby-compiler/core/parse.y" +#line 2339 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_and(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7334 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7349 "mrbgems/mruby-compiler/core/y.tab.c" break; case 237: -#line 2327 "mrbgems/mruby-compiler/core/parse.y" +#line 2343 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_or(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7342 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7357 "mrbgems/mruby-compiler/core/y.tab.c" break; case 238: -#line 2331 "mrbgems/mruby-compiler/core/parse.y" +#line 2347 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[-5].nd)), (yyvsp[-3].nd), (yyvsp[0].nd)); } -#line 7350 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7365 "mrbgems/mruby-compiler/core/y.tab.c" break; case 239: -#line 2335 "mrbgems/mruby-compiler/core/parse.y" +#line 2351 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[-5].nd)), (yyvsp[-3].nd), (yyvsp[0].nd)); } -#line 7358 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7373 "mrbgems/mruby-compiler/core/y.tab.c" break; case 240: -#line 2339 "mrbgems/mruby-compiler/core/parse.y" +#line 2355 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-3].nd); + endless_method_name(p, (yyvsp[-3].nd)); void_expr_error(p, (yyvsp[0].nd)); defn_setup(p, (yyval.nd), (yyvsp[-2].nd), (yyvsp[0].nd)); nvars_unnest(p); p->in_def--; } -#line 7370 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7386 "mrbgems/mruby-compiler/core/y.tab.c" break; case 241: -#line 2347 "mrbgems/mruby-compiler/core/parse.y" +#line 2364 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-5].nd); + endless_method_name(p, (yyvsp[-5].nd)); void_expr_error(p, (yyvsp[-2].nd)); void_expr_error(p, (yyvsp[0].nd)); defn_setup(p, (yyval.nd), (yyvsp[-4].nd), new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd))); nvars_unnest(p); p->in_def--; } -#line 7383 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7400 "mrbgems/mruby-compiler/core/y.tab.c" break; case 242: -#line 2356 "mrbgems/mruby-compiler/core/parse.y" +#line 2374 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-3].nd); void_expr_error(p, (yyvsp[0].nd)); @@ -7392,11 +7409,11 @@ yyreduce: p->in_def--; p->in_single--; } -#line 7396 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7413 "mrbgems/mruby-compiler/core/y.tab.c" break; case 243: -#line 2365 "mrbgems/mruby-compiler/core/parse.y" +#line 2383 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-5].nd); void_expr_error(p, (yyvsp[-2].nd)); @@ -7406,71 +7423,71 @@ yyreduce: p->in_def--; p->in_single--; } -#line 7410 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7427 "mrbgems/mruby-compiler/core/y.tab.c" break; case 244: -#line 2375 "mrbgems/mruby-compiler/core/parse.y" +#line 2393 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 7418 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7435 "mrbgems/mruby-compiler/core/y.tab.c" break; case 246: -#line 2382 "mrbgems/mruby-compiler/core/parse.y" +#line 2400 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7427 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7444 "mrbgems/mruby-compiler/core/y.tab.c" break; case 247: -#line 2387 "mrbgems/mruby-compiler/core/parse.y" +#line 2405 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-3].nd), new_kw_hash(p, (yyvsp[-1].nd))); } -#line 7435 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7452 "mrbgems/mruby-compiler/core/y.tab.c" break; case 248: -#line 2391 "mrbgems/mruby-compiler/core/parse.y" +#line 2409 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(new_kw_hash(p, (yyvsp[-1].nd)), 0); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7444 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7461 "mrbgems/mruby-compiler/core/y.tab.c" break; case 249: -#line 2398 "mrbgems/mruby-compiler/core/parse.y" +#line 2416 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 7452 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7469 "mrbgems/mruby-compiler/core/y.tab.c" break; case 250: -#line 2402 "mrbgems/mruby-compiler/core/parse.y" +#line 2420 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[-2].nd)); void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7462 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7479 "mrbgems/mruby-compiler/core/y.tab.c" break; case 251: -#line 2410 "mrbgems/mruby-compiler/core/parse.y" +#line 2428 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 7470 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7487 "mrbgems/mruby-compiler/core/y.tab.c" break; case 252: -#line 2414 "mrbgems/mruby-compiler/core/parse.y" +#line 2432 "mrbgems/mruby-compiler/core/parse.y" { #if 1 mrb_sym r = intern_op(mul); @@ -7486,11 +7503,11 @@ yyreduce: new_block_arg(p, new_lvar(p, b))); #endif } -#line 7490 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7507 "mrbgems/mruby-compiler/core/y.tab.c" break; case 253: -#line 2430 "mrbgems/mruby-compiler/core/parse.y" +#line 2448 "mrbgems/mruby-compiler/core/parse.y" { #if 1 mrb_sym r = intern_op(mul); @@ -7514,373 +7531,373 @@ yyreduce: (yyval.nd) = 0; } } -#line 7518 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7535 "mrbgems/mruby-compiler/core/y.tab.c" break; case 258: -#line 2462 "mrbgems/mruby-compiler/core/parse.y" +#line 2480 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons((yyvsp[-1].nd),0); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7527 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7544 "mrbgems/mruby-compiler/core/y.tab.c" break; case 259: -#line 2467 "mrbgems/mruby-compiler/core/parse.y" +#line 2485 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(push((yyvsp[-3].nd), new_kw_hash(p, (yyvsp[-1].nd))), 0); NODE_LINENO((yyval.nd), (yyvsp[-3].nd)); } -#line 7536 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7553 "mrbgems/mruby-compiler/core/y.tab.c" break; case 260: -#line 2472 "mrbgems/mruby-compiler/core/parse.y" +#line 2490 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(list1(new_kw_hash(p, (yyvsp[-1].nd))), 0); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7545 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7562 "mrbgems/mruby-compiler/core/y.tab.c" break; case 261: -#line 2479 "mrbgems/mruby-compiler/core/parse.y" +#line 2497 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(list1((yyvsp[0].nd)), 0); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 7555 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7572 "mrbgems/mruby-compiler/core/y.tab.c" break; case 262: -#line 2485 "mrbgems/mruby-compiler/core/parse.y" +#line 2503 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons((yyvsp[-1].nd), (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7564 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7581 "mrbgems/mruby-compiler/core/y.tab.c" break; case 263: -#line 2490 "mrbgems/mruby-compiler/core/parse.y" +#line 2508 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(list1(new_kw_hash(p, (yyvsp[-1].nd))), (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7573 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7590 "mrbgems/mruby-compiler/core/y.tab.c" break; case 264: -#line 2495 "mrbgems/mruby-compiler/core/parse.y" +#line 2513 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(push((yyvsp[-3].nd), new_kw_hash(p, (yyvsp[-1].nd))), (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[-3].nd)); } -#line 7582 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7599 "mrbgems/mruby-compiler/core/y.tab.c" break; case 265: -#line 2500 "mrbgems/mruby-compiler/core/parse.y" +#line 2518 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(0, (yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 7591 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7608 "mrbgems/mruby-compiler/core/y.tab.c" break; case 266: -#line 2506 "mrbgems/mruby-compiler/core/parse.y" +#line 2524 "mrbgems/mruby-compiler/core/parse.y" { (yyval.stack) = p->cmdarg_stack; CMDARG_PUSH(1); } -#line 7600 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7617 "mrbgems/mruby-compiler/core/y.tab.c" break; case 267: -#line 2511 "mrbgems/mruby-compiler/core/parse.y" +#line 2529 "mrbgems/mruby-compiler/core/parse.y" { p->cmdarg_stack = (yyvsp[-1].stack); (yyval.nd) = (yyvsp[0].nd); } -#line 7609 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7626 "mrbgems/mruby-compiler/core/y.tab.c" break; case 268: -#line 2518 "mrbgems/mruby-compiler/core/parse.y" +#line 2536 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block_arg(p, (yyvsp[0].nd)); } -#line 7617 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7634 "mrbgems/mruby-compiler/core/y.tab.c" break; case 269: -#line 2524 "mrbgems/mruby-compiler/core/parse.y" +#line 2542 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 7625 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7642 "mrbgems/mruby-compiler/core/y.tab.c" break; case 270: -#line 2528 "mrbgems/mruby-compiler/core/parse.y" +#line 2546 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 7633 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7650 "mrbgems/mruby-compiler/core/y.tab.c" break; case 273: -#line 2538 "mrbgems/mruby-compiler/core/parse.y" +#line 2556 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons((yyvsp[0].nd), 0); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 7643 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7660 "mrbgems/mruby-compiler/core/y.tab.c" break; case 274: -#line 2544 "mrbgems/mruby-compiler/core/parse.y" +#line 2562 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(new_splat(p, (yyvsp[0].nd)), 0); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 7653 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7670 "mrbgems/mruby-compiler/core/y.tab.c" break; case 275: -#line 2550 "mrbgems/mruby-compiler/core/parse.y" +#line 2568 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7662 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7679 "mrbgems/mruby-compiler/core/y.tab.c" break; case 276: -#line 2555 "mrbgems/mruby-compiler/core/parse.y" +#line 2573 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = push((yyvsp[-3].nd), new_splat(p, (yyvsp[0].nd))); } -#line 7671 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7688 "mrbgems/mruby-compiler/core/y.tab.c" break; case 277: -#line 2562 "mrbgems/mruby-compiler/core/parse.y" +#line 2580 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 7680 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7697 "mrbgems/mruby-compiler/core/y.tab.c" break; case 278: -#line 2567 "mrbgems/mruby-compiler/core/parse.y" +#line 2585 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = push((yyvsp[-3].nd), new_splat(p, (yyvsp[0].nd))); } -#line 7689 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7706 "mrbgems/mruby-compiler/core/y.tab.c" break; case 279: -#line 2572 "mrbgems/mruby-compiler/core/parse.y" +#line 2590 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = list1(new_splat(p, (yyvsp[0].nd))); } -#line 7698 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7715 "mrbgems/mruby-compiler/core/y.tab.c" break; case 287: -#line 2586 "mrbgems/mruby-compiler/core/parse.y" +#line 2604 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_nvar(p, (yyvsp[0].num)); } -#line 7706 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7723 "mrbgems/mruby-compiler/core/y.tab.c" break; case 288: -#line 2590 "mrbgems/mruby-compiler/core/parse.y" +#line 2608 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[0].id), 0); } -#line 7714 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7731 "mrbgems/mruby-compiler/core/y.tab.c" break; case 289: -#line 2594 "mrbgems/mruby-compiler/core/parse.y" +#line 2612 "mrbgems/mruby-compiler/core/parse.y" { (yyval.stack) = p->cmdarg_stack; p->cmdarg_stack = 0; } -#line 7723 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7740 "mrbgems/mruby-compiler/core/y.tab.c" break; case 290: -#line 2600 "mrbgems/mruby-compiler/core/parse.y" +#line 2618 "mrbgems/mruby-compiler/core/parse.y" { p->cmdarg_stack = (yyvsp[-2].stack); (yyval.nd) = (yyvsp[-1].nd); } -#line 7732 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7749 "mrbgems/mruby-compiler/core/y.tab.c" break; case 291: -#line 2605 "mrbgems/mruby-compiler/core/parse.y" +#line 2623 "mrbgems/mruby-compiler/core/parse.y" { (yyval.stack) = p->cmdarg_stack; p->cmdarg_stack = 0; } -#line 7741 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7758 "mrbgems/mruby-compiler/core/y.tab.c" break; case 292: -#line 2609 "mrbgems/mruby-compiler/core/parse.y" +#line 2627 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_ENDARG;} -#line 7747 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7764 "mrbgems/mruby-compiler/core/y.tab.c" break; case 293: -#line 2610 "mrbgems/mruby-compiler/core/parse.y" +#line 2628 "mrbgems/mruby-compiler/core/parse.y" { p->cmdarg_stack = (yyvsp[-3].stack); (yyval.nd) = (yyvsp[-2].nd); } -#line 7756 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7773 "mrbgems/mruby-compiler/core/y.tab.c" break; case 294: -#line 2614 "mrbgems/mruby-compiler/core/parse.y" +#line 2632 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_ENDARG;} -#line 7762 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7779 "mrbgems/mruby-compiler/core/y.tab.c" break; case 295: -#line 2615 "mrbgems/mruby-compiler/core/parse.y" +#line 2633 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_nil(p); } -#line 7770 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7787 "mrbgems/mruby-compiler/core/y.tab.c" break; case 296: -#line 2619 "mrbgems/mruby-compiler/core/parse.y" +#line 2637 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 7778 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7795 "mrbgems/mruby-compiler/core/y.tab.c" break; case 297: -#line 2623 "mrbgems/mruby-compiler/core/parse.y" +#line 2641 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id)); } -#line 7786 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7803 "mrbgems/mruby-compiler/core/y.tab.c" break; case 298: -#line 2627 "mrbgems/mruby-compiler/core/parse.y" +#line 2645 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_colon3(p, (yyvsp[0].id)); } -#line 7794 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7811 "mrbgems/mruby-compiler/core/y.tab.c" break; case 299: -#line 2631 "mrbgems/mruby-compiler/core/parse.y" +#line 2649 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_array(p, (yyvsp[-1].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7803 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7820 "mrbgems/mruby-compiler/core/y.tab.c" break; case 300: -#line 2636 "mrbgems/mruby-compiler/core/parse.y" +#line 2654 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_hash(p, (yyvsp[-1].nd)); NODE_LINENO((yyval.nd), (yyvsp[-1].nd)); } -#line 7812 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7829 "mrbgems/mruby-compiler/core/y.tab.c" break; case 301: -#line 2641 "mrbgems/mruby-compiler/core/parse.y" +#line 2659 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_return(p, 0); } -#line 7820 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7837 "mrbgems/mruby-compiler/core/y.tab.c" break; case 302: -#line 2645 "mrbgems/mruby-compiler/core/parse.y" +#line 2663 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_yield(p, (yyvsp[0].nd)); } -#line 7828 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7845 "mrbgems/mruby-compiler/core/y.tab.c" break; case 303: -#line 2649 "mrbgems/mruby-compiler/core/parse.y" +#line 2667 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, cond((yyvsp[-1].nd)), "!"); } -#line 7836 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7853 "mrbgems/mruby-compiler/core/y.tab.c" break; case 304: -#line 2653 "mrbgems/mruby-compiler/core/parse.y" +#line 2671 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = call_uni_op(p, new_nil(p), "!"); } -#line 7844 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7861 "mrbgems/mruby-compiler/core/y.tab.c" break; case 305: -#line 2657 "mrbgems/mruby-compiler/core/parse.y" +#line 2675 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), cons(0, (yyvsp[0].nd))); } -#line 7852 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7869 "mrbgems/mruby-compiler/core/y.tab.c" break; case 307: -#line 2662 "mrbgems/mruby-compiler/core/parse.y" +#line 2680 "mrbgems/mruby-compiler/core/parse.y" { call_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd)); (yyval.nd) = (yyvsp[-1].nd); } -#line 7861 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7878 "mrbgems/mruby-compiler/core/y.tab.c" break; case 308: -#line 2667 "mrbgems/mruby-compiler/core/parse.y" +#line 2685 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); (yyval.num) = p->lpar_beg; p->lpar_beg = ++p->paren_nest; } -#line 7871 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7888 "mrbgems/mruby-compiler/core/y.tab.c" break; case 309: -#line 2673 "mrbgems/mruby-compiler/core/parse.y" +#line 2691 "mrbgems/mruby-compiler/core/parse.y" { (yyval.stack) = p->cmdarg_stack; p->cmdarg_stack = 0; } -#line 7880 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7897 "mrbgems/mruby-compiler/core/y.tab.c" break; case 310: -#line 2678 "mrbgems/mruby-compiler/core/parse.y" +#line 2696 "mrbgems/mruby-compiler/core/parse.y" { p->lpar_beg = (yyvsp[-3].num); (yyval.nd) = new_lambda(p, (yyvsp[-2].nd), (yyvsp[0].nd)); @@ -7888,149 +7905,149 @@ yyreduce: p->cmdarg_stack = (yyvsp[-1].stack); CMDARG_LEXPOP(); } -#line 7892 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7909 "mrbgems/mruby-compiler/core/y.tab.c" break; case 311: -#line 2689 "mrbgems/mruby-compiler/core/parse.y" +#line 2707 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[-4].nd)), (yyvsp[-2].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-5].num)); } -#line 7901 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7918 "mrbgems/mruby-compiler/core/y.tab.c" break; case 312: -#line 2697 "mrbgems/mruby-compiler/core/parse.y" +#line 2715 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_unless(p, cond((yyvsp[-4].nd)), (yyvsp[-2].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-5].num)); } -#line 7910 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7927 "mrbgems/mruby-compiler/core/y.tab.c" break; case 313: -#line 2701 "mrbgems/mruby-compiler/core/parse.y" +#line 2719 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 7916 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7933 "mrbgems/mruby-compiler/core/y.tab.c" break; case 314: -#line 2701 "mrbgems/mruby-compiler/core/parse.y" +#line 2719 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 7922 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7939 "mrbgems/mruby-compiler/core/y.tab.c" break; case 315: -#line 2704 "mrbgems/mruby-compiler/core/parse.y" +#line 2722 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_while(p, cond((yyvsp[-4].nd)), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-6].num)); } -#line 7931 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7948 "mrbgems/mruby-compiler/core/y.tab.c" break; case 316: -#line 2708 "mrbgems/mruby-compiler/core/parse.y" +#line 2726 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 7937 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7954 "mrbgems/mruby-compiler/core/y.tab.c" break; case 317: -#line 2708 "mrbgems/mruby-compiler/core/parse.y" +#line 2726 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 7943 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7960 "mrbgems/mruby-compiler/core/y.tab.c" break; case 318: -#line 2711 "mrbgems/mruby-compiler/core/parse.y" +#line 2729 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_until(p, cond((yyvsp[-4].nd)), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-6].num)); } -#line 7952 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7969 "mrbgems/mruby-compiler/core/y.tab.c" break; case 319: -#line 2718 "mrbgems/mruby-compiler/core/parse.y" +#line 2736 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_case(p, (yyvsp[-3].nd), (yyvsp[-1].nd)); } -#line 7960 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7977 "mrbgems/mruby-compiler/core/y.tab.c" break; case 320: -#line 2722 "mrbgems/mruby-compiler/core/parse.y" +#line 2740 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_case(p, 0, (yyvsp[-1].nd)); } -#line 7968 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7985 "mrbgems/mruby-compiler/core/y.tab.c" break; case 321: -#line 2726 "mrbgems/mruby-compiler/core/parse.y" +#line 2744 "mrbgems/mruby-compiler/core/parse.y" {COND_PUSH(1);} -#line 7974 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7991 "mrbgems/mruby-compiler/core/y.tab.c" break; case 322: -#line 2728 "mrbgems/mruby-compiler/core/parse.y" +#line 2746 "mrbgems/mruby-compiler/core/parse.y" {COND_POP();} -#line 7980 "mrbgems/mruby-compiler/core/y.tab.c" +#line 7997 "mrbgems/mruby-compiler/core/y.tab.c" break; case 323: -#line 2731 "mrbgems/mruby-compiler/core/parse.y" +#line 2749 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_for(p, (yyvsp[-7].nd), (yyvsp[-4].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-8].num)); } -#line 7989 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8006 "mrbgems/mruby-compiler/core/y.tab.c" break; case 324: -#line 2737 "mrbgems/mruby-compiler/core/parse.y" +#line 2755 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "class definition in method body"); (yyval.nd) = local_switch(p); nvars_block(p); } -#line 8000 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8017 "mrbgems/mruby-compiler/core/y.tab.c" break; case 325: -#line 2745 "mrbgems/mruby-compiler/core/parse.y" +#line 2763 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_class(p, (yyvsp[-4].nd), (yyvsp[-3].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-5].num)); local_resume(p, (yyvsp[-2].nd)); nvars_unnest(p); } -#line 8011 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8028 "mrbgems/mruby-compiler/core/y.tab.c" break; case 326: -#line 2753 "mrbgems/mruby-compiler/core/parse.y" +#line 2771 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = p->in_def; p->in_def = 0; } -#line 8020 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8037 "mrbgems/mruby-compiler/core/y.tab.c" break; case 327: -#line 2758 "mrbgems/mruby-compiler/core/parse.y" +#line 2776 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(local_switch(p), nint(p->in_single)); nvars_block(p); p->in_single = 0; } -#line 8030 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8047 "mrbgems/mruby-compiler/core/y.tab.c" break; case 328: -#line 2765 "mrbgems/mruby-compiler/core/parse.y" +#line 2783 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_sclass(p, (yyvsp[-5].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-7].num)); @@ -8039,44 +8056,44 @@ yyreduce: p->in_def = (yyvsp[-4].num); p->in_single = intn((yyvsp[-2].nd)->cdr); } -#line 8043 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8060 "mrbgems/mruby-compiler/core/y.tab.c" break; case 329: -#line 2775 "mrbgems/mruby-compiler/core/parse.y" +#line 2793 "mrbgems/mruby-compiler/core/parse.y" { if (p->in_def || p->in_single) yyerror(p, "module definition in method body"); (yyval.nd) = local_switch(p); nvars_block(p); } -#line 8054 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8071 "mrbgems/mruby-compiler/core/y.tab.c" break; case 330: -#line 2783 "mrbgems/mruby-compiler/core/parse.y" +#line 2801 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_module(p, (yyvsp[-3].nd), (yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-4].num)); local_resume(p, (yyvsp[-2].nd)); nvars_unnest(p); } -#line 8065 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8082 "mrbgems/mruby-compiler/core/y.tab.c" break; case 331: -#line 2793 "mrbgems/mruby-compiler/core/parse.y" +#line 2811 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-3].nd); defn_setup(p, (yyval.nd), (yyvsp[-2].nd), (yyvsp[-1].nd)); nvars_unnest(p); p->in_def--; } -#line 8076 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8093 "mrbgems/mruby-compiler/core/y.tab.c" break; case 332: -#line 2803 "mrbgems/mruby-compiler/core/parse.y" +#line 2821 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-3].nd); defs_setup(p, (yyval.nd), (yyvsp[-2].nd), (yyvsp[-1].nd)); @@ -8084,451 +8101,451 @@ yyreduce: p->in_def--; p->in_single--; } -#line 8088 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8105 "mrbgems/mruby-compiler/core/y.tab.c" break; case 333: -#line 2811 "mrbgems/mruby-compiler/core/parse.y" +#line 2829 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_break(p, 0); } -#line 8096 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8113 "mrbgems/mruby-compiler/core/y.tab.c" break; case 334: -#line 2815 "mrbgems/mruby-compiler/core/parse.y" +#line 2833 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_next(p, 0); } -#line 8104 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8121 "mrbgems/mruby-compiler/core/y.tab.c" break; case 335: -#line 2819 "mrbgems/mruby-compiler/core/parse.y" +#line 2837 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_redo(p); } -#line 8112 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8129 "mrbgems/mruby-compiler/core/y.tab.c" break; case 336: -#line 2823 "mrbgems/mruby-compiler/core/parse.y" +#line 2841 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_retry(p); } -#line 8120 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8137 "mrbgems/mruby-compiler/core/y.tab.c" break; case 337: -#line 2829 "mrbgems/mruby-compiler/core/parse.y" +#line 2847 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); if (!(yyval.nd)) (yyval.nd) = new_nil(p); } -#line 8129 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8146 "mrbgems/mruby-compiler/core/y.tab.c" break; case 344: -#line 2848 "mrbgems/mruby-compiler/core/parse.y" +#line 2866 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_if(p, cond((yyvsp[-3].nd)), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8137 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8154 "mrbgems/mruby-compiler/core/y.tab.c" break; case 346: -#line 2855 "mrbgems/mruby-compiler/core/parse.y" +#line 2873 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8145 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8162 "mrbgems/mruby-compiler/core/y.tab.c" break; case 347: -#line 2861 "mrbgems/mruby-compiler/core/parse.y" +#line 2879 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(list1((yyvsp[0].nd))); } -#line 8153 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8170 "mrbgems/mruby-compiler/core/y.tab.c" break; case 349: -#line 2868 "mrbgems/mruby-compiler/core/parse.y" +#line 2886 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[0].nd),0,0); } -#line 8161 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8178 "mrbgems/mruby-compiler/core/y.tab.c" break; case 350: -#line 2872 "mrbgems/mruby-compiler/core/parse.y" +#line 2890 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-3].nd), new_arg(p, (yyvsp[0].id)), 0); } -#line 8169 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8186 "mrbgems/mruby-compiler/core/y.tab.c" break; case 351: -#line 2876 "mrbgems/mruby-compiler/core/parse.y" +#line 2894 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-5].nd), new_arg(p, (yyvsp[-2].id)), (yyvsp[0].nd)); } -#line 8177 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8194 "mrbgems/mruby-compiler/core/y.tab.c" break; case 352: -#line 2880 "mrbgems/mruby-compiler/core/parse.y" +#line 2898 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, 0); (yyval.nd) = list3((yyvsp[-2].nd), nint(-1), 0); } -#line 8186 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8203 "mrbgems/mruby-compiler/core/y.tab.c" break; case 353: -#line 2885 "mrbgems/mruby-compiler/core/parse.y" +#line 2903 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3((yyvsp[-4].nd), nint(-1), (yyvsp[0].nd)); } -#line 8194 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8211 "mrbgems/mruby-compiler/core/y.tab.c" break; case 354: -#line 2889 "mrbgems/mruby-compiler/core/parse.y" +#line 2907 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, new_arg(p, (yyvsp[0].id)), 0); } -#line 8202 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8219 "mrbgems/mruby-compiler/core/y.tab.c" break; case 355: -#line 2893 "mrbgems/mruby-compiler/core/parse.y" +#line 2911 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, new_arg(p, (yyvsp[-2].id)), (yyvsp[0].nd)); } -#line 8210 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8227 "mrbgems/mruby-compiler/core/y.tab.c" break; case 356: -#line 2897 "mrbgems/mruby-compiler/core/parse.y" +#line 2915 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, 0); (yyval.nd) = list3(0, nint(-1), 0); } -#line 8219 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8236 "mrbgems/mruby-compiler/core/y.tab.c" break; case 357: -#line 2902 "mrbgems/mruby-compiler/core/parse.y" +#line 2920 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, 0); } -#line 8227 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8244 "mrbgems/mruby-compiler/core/y.tab.c" break; case 358: -#line 2906 "mrbgems/mruby-compiler/core/parse.y" +#line 2924 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list3(0, nint(-1), (yyvsp[0].nd)); } -#line 8235 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8252 "mrbgems/mruby-compiler/core/y.tab.c" break; case 359: -#line 2912 "mrbgems/mruby-compiler/core/parse.y" +#line 2930 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-3].nd), (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 8243 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8260 "mrbgems/mruby-compiler/core/y.tab.c" break; case 360: -#line 2916 "mrbgems/mruby-compiler/core/parse.y" +#line 2934 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-1].nd), 0, (yyvsp[0].id)); } -#line 8251 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8268 "mrbgems/mruby-compiler/core/y.tab.c" break; case 361: -#line 2920 "mrbgems/mruby-compiler/core/parse.y" +#line 2938 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 8259 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8276 "mrbgems/mruby-compiler/core/y.tab.c" break; case 362: -#line 2924 "mrbgems/mruby-compiler/core/parse.y" +#line 2942 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, (yyvsp[0].id)); } -#line 8267 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8284 "mrbgems/mruby-compiler/core/y.tab.c" break; case 363: -#line 2930 "mrbgems/mruby-compiler/core/parse.y" +#line 2948 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8275 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8292 "mrbgems/mruby-compiler/core/y.tab.c" break; case 364: -#line 2934 "mrbgems/mruby-compiler/core/parse.y" +#line 2952 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, 0); } -#line 8283 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8300 "mrbgems/mruby-compiler/core/y.tab.c" break; case 365: -#line 2940 "mrbgems/mruby-compiler/core/parse.y" +#line 2958 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 8291 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8308 "mrbgems/mruby-compiler/core/y.tab.c" break; case 366: -#line 2944 "mrbgems/mruby-compiler/core/parse.y" +#line 2962 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-7].nd), (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8299 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8316 "mrbgems/mruby-compiler/core/y.tab.c" break; case 367: -#line 2948 "mrbgems/mruby-compiler/core/parse.y" +#line 2966 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 8307 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8324 "mrbgems/mruby-compiler/core/y.tab.c" break; case 368: -#line 2952 "mrbgems/mruby-compiler/core/parse.y" +#line 2970 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8315 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8332 "mrbgems/mruby-compiler/core/y.tab.c" break; case 369: -#line 2956 "mrbgems/mruby-compiler/core/parse.y" +#line 2974 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 8323 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8340 "mrbgems/mruby-compiler/core/y.tab.c" break; case 370: -#line 2960 "mrbgems/mruby-compiler/core/parse.y" +#line 2978 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-2].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 8331 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8348 "mrbgems/mruby-compiler/core/y.tab.c" break; case 371: -#line 2964 "mrbgems/mruby-compiler/core/parse.y" +#line 2982 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8339 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8356 "mrbgems/mruby-compiler/core/y.tab.c" break; case 372: -#line 2968 "mrbgems/mruby-compiler/core/parse.y" +#line 2986 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-1].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 8347 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8364 "mrbgems/mruby-compiler/core/y.tab.c" break; case 373: -#line 2972 "mrbgems/mruby-compiler/core/parse.y" +#line 2990 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 8355 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8372 "mrbgems/mruby-compiler/core/y.tab.c" break; case 374: -#line 2976 "mrbgems/mruby-compiler/core/parse.y" +#line 2994 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8363 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8380 "mrbgems/mruby-compiler/core/y.tab.c" break; case 375: -#line 2980 "mrbgems/mruby-compiler/core/parse.y" +#line 2998 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 8371 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8388 "mrbgems/mruby-compiler/core/y.tab.c" break; case 376: -#line 2984 "mrbgems/mruby-compiler/core/parse.y" +#line 3002 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8379 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8396 "mrbgems/mruby-compiler/core/y.tab.c" break; case 377: -#line 2988 "mrbgems/mruby-compiler/core/parse.y" +#line 3006 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 8387 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8404 "mrbgems/mruby-compiler/core/y.tab.c" break; case 378: -#line 2992 "mrbgems/mruby-compiler/core/parse.y" +#line 3010 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8395 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8412 "mrbgems/mruby-compiler/core/y.tab.c" break; case 379: -#line 2996 "mrbgems/mruby-compiler/core/parse.y" +#line 3014 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, 0, 0, (yyvsp[0].nd)); } -#line 8403 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8420 "mrbgems/mruby-compiler/core/y.tab.c" break; case 380: -#line 3002 "mrbgems/mruby-compiler/core/parse.y" +#line 3020 "mrbgems/mruby-compiler/core/parse.y" { local_add_blk(p, 0); (yyval.nd) = 0; } -#line 8412 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8429 "mrbgems/mruby-compiler/core/y.tab.c" break; case 381: -#line 3007 "mrbgems/mruby-compiler/core/parse.y" +#line 3025 "mrbgems/mruby-compiler/core/parse.y" { p->cmd_start = TRUE; (yyval.nd) = (yyvsp[0].nd); } -#line 8421 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8438 "mrbgems/mruby-compiler/core/y.tab.c" break; case 382: -#line 3013 "mrbgems/mruby-compiler/core/parse.y" +#line 3031 "mrbgems/mruby-compiler/core/parse.y" {local_add_blk(p, 0);} -#line 8427 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8444 "mrbgems/mruby-compiler/core/y.tab.c" break; case 383: -#line 3014 "mrbgems/mruby-compiler/core/parse.y" +#line 3032 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 8435 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8452 "mrbgems/mruby-compiler/core/y.tab.c" break; case 384: -#line 3018 "mrbgems/mruby-compiler/core/parse.y" +#line 3036 "mrbgems/mruby-compiler/core/parse.y" { local_add_blk(p, 0); (yyval.nd) = 0; } -#line 8444 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8461 "mrbgems/mruby-compiler/core/y.tab.c" break; case 385: -#line 3023 "mrbgems/mruby-compiler/core/parse.y" +#line 3041 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-2].nd); } -#line 8452 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8469 "mrbgems/mruby-compiler/core/y.tab.c" break; case 386: -#line 3030 "mrbgems/mruby-compiler/core/parse.y" +#line 3048 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 8460 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8477 "mrbgems/mruby-compiler/core/y.tab.c" break; case 387: -#line 3034 "mrbgems/mruby-compiler/core/parse.y" +#line 3052 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 8468 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8485 "mrbgems/mruby-compiler/core/y.tab.c" break; case 390: -#line 3044 "mrbgems/mruby-compiler/core/parse.y" +#line 3062 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, (yyvsp[0].id)); new_bv(p, (yyvsp[0].id)); } -#line 8477 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8494 "mrbgems/mruby-compiler/core/y.tab.c" break; case 392: -#line 3052 "mrbgems/mruby-compiler/core/parse.y" +#line 3070 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-2].nd); } -#line 8485 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8502 "mrbgems/mruby-compiler/core/y.tab.c" break; case 393: -#line 3056 "mrbgems/mruby-compiler/core/parse.y" +#line 3074 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8493 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8510 "mrbgems/mruby-compiler/core/y.tab.c" break; case 394: -#line 3062 "mrbgems/mruby-compiler/core/parse.y" +#line 3080 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 8501 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8518 "mrbgems/mruby-compiler/core/y.tab.c" break; case 395: -#line 3066 "mrbgems/mruby-compiler/core/parse.y" +#line 3084 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 8509 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8526 "mrbgems/mruby-compiler/core/y.tab.c" break; case 396: -#line 3072 "mrbgems/mruby-compiler/core/parse.y" +#line 3090 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); } -#line 8518 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8535 "mrbgems/mruby-compiler/core/y.tab.c" break; case 397: -#line 3079 "mrbgems/mruby-compiler/core/parse.y" +#line 3097 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block(p,(yyvsp[-2].nd),(yyvsp[-1].nd)); local_unnest(p); nvars_unnest(p); } -#line 8528 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8545 "mrbgems/mruby-compiler/core/y.tab.c" break; case 398: -#line 3087 "mrbgems/mruby-compiler/core/parse.y" +#line 3105 "mrbgems/mruby-compiler/core/parse.y" { if (typen((yyvsp[-1].nd)->car) == NODE_YIELD) { yyerror(p, "block given to yield"); @@ -8538,159 +8555,159 @@ yyreduce: } (yyval.nd) = (yyvsp[-1].nd); } -#line 8542 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8559 "mrbgems/mruby-compiler/core/y.tab.c" break; case 399: -#line 3097 "mrbgems/mruby-compiler/core/parse.y" +#line 3115 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 8550 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8567 "mrbgems/mruby-compiler/core/y.tab.c" break; case 400: -#line 3101 "mrbgems/mruby-compiler/core/parse.y" +#line 3119 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num)); call_with_block(p, (yyval.nd), (yyvsp[0].nd)); } -#line 8559 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8576 "mrbgems/mruby-compiler/core/y.tab.c" break; case 401: -#line 3106 "mrbgems/mruby-compiler/core/parse.y" +#line 3124 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num)); call_with_block(p, (yyval.nd), (yyvsp[0].nd)); } -#line 8568 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8585 "mrbgems/mruby-compiler/core/y.tab.c" break; case 402: -#line 3113 "mrbgems/mruby-compiler/core/parse.y" +#line 3131 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_fcall(p, (yyvsp[-1].id), (yyvsp[0].nd)); } -#line 8576 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8593 "mrbgems/mruby-compiler/core/y.tab.c" break; case 403: -#line 3117 "mrbgems/mruby-compiler/core/parse.y" +#line 3135 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num)); } -#line 8584 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8601 "mrbgems/mruby-compiler/core/y.tab.c" break; case 404: -#line 3121 "mrbgems/mruby-compiler/core/parse.y" +#line 3139 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), tCOLON2); } -#line 8592 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8609 "mrbgems/mruby-compiler/core/y.tab.c" break; case 405: -#line 3125 "mrbgems/mruby-compiler/core/parse.y" +#line 3143 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2); } -#line 8600 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8617 "mrbgems/mruby-compiler/core/y.tab.c" break; case 406: -#line 3129 "mrbgems/mruby-compiler/core/parse.y" +#line 3147 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM_2(p->mrb, call), (yyvsp[0].nd), (yyvsp[-1].num)); } -#line 8608 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8625 "mrbgems/mruby-compiler/core/y.tab.c" break; case 407: -#line 3133 "mrbgems/mruby-compiler/core/parse.y" +#line 3151 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM_2(p->mrb, call), (yyvsp[0].nd), tCOLON2); } -#line 8616 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8633 "mrbgems/mruby-compiler/core/y.tab.c" break; case 408: -#line 3137 "mrbgems/mruby-compiler/core/parse.y" +#line 3155 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_super(p, (yyvsp[0].nd)); } -#line 8624 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8641 "mrbgems/mruby-compiler/core/y.tab.c" break; case 409: -#line 3141 "mrbgems/mruby-compiler/core/parse.y" +#line 3159 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_zsuper(p); } -#line 8632 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8649 "mrbgems/mruby-compiler/core/y.tab.c" break; case 410: -#line 3145 "mrbgems/mruby-compiler/core/parse.y" +#line 3163 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.'); } -#line 8640 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8657 "mrbgems/mruby-compiler/core/y.tab.c" break; case 411: -#line 3151 "mrbgems/mruby-compiler/core/parse.y" +#line 3169 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); (yyval.num) = p->lineno; } -#line 8650 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8667 "mrbgems/mruby-compiler/core/y.tab.c" break; case 412: -#line 3158 "mrbgems/mruby-compiler/core/parse.y" +#line 3176 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block(p,(yyvsp[-2].nd),(yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-3].num)); local_unnest(p); nvars_unnest(p); } -#line 8661 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8678 "mrbgems/mruby-compiler/core/y.tab.c" break; case 413: -#line 3165 "mrbgems/mruby-compiler/core/parse.y" +#line 3183 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); nvars_nest(p); (yyval.num) = p->lineno; } -#line 8671 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8688 "mrbgems/mruby-compiler/core/y.tab.c" break; case 414: -#line 3172 "mrbgems/mruby-compiler/core/parse.y" +#line 3190 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_block(p,(yyvsp[-2].nd),(yyvsp[-1].nd)); SET_LINENO((yyval.nd), (yyvsp[-3].num)); local_unnest(p); nvars_unnest(p); } -#line 8682 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8699 "mrbgems/mruby-compiler/core/y.tab.c" break; case 415: -#line 3183 "mrbgems/mruby-compiler/core/parse.y" +#line 3201 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = cons(cons((yyvsp[-3].nd), (yyvsp[-1].nd)), (yyvsp[0].nd)); } -#line 8690 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8707 "mrbgems/mruby-compiler/core/y.tab.c" break; case 416: -#line 3189 "mrbgems/mruby-compiler/core/parse.y" +#line 3207 "mrbgems/mruby-compiler/core/parse.y" { if ((yyvsp[0].nd)) { (yyval.nd) = cons(cons(0, (yyvsp[0].nd)), 0); @@ -8699,383 +8716,383 @@ yyreduce: (yyval.nd) = 0; } } -#line 8703 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8720 "mrbgems/mruby-compiler/core/y.tab.c" break; case 418: -#line 3203 "mrbgems/mruby-compiler/core/parse.y" +#line 3221 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(list3((yyvsp[-4].nd), (yyvsp[-3].nd), (yyvsp[-1].nd))); if ((yyvsp[0].nd)) (yyval.nd) = append((yyval.nd), (yyvsp[0].nd)); } -#line 8712 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8729 "mrbgems/mruby-compiler/core/y.tab.c" break; case 420: -#line 3211 "mrbgems/mruby-compiler/core/parse.y" +#line 3229 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 8720 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8737 "mrbgems/mruby-compiler/core/y.tab.c" break; case 423: -#line 3219 "mrbgems/mruby-compiler/core/parse.y" +#line 3237 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8728 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8745 "mrbgems/mruby-compiler/core/y.tab.c" break; case 425: -#line 3226 "mrbgems/mruby-compiler/core/parse.y" +#line 3244 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8736 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8753 "mrbgems/mruby-compiler/core/y.tab.c" break; case 432: -#line 3240 "mrbgems/mruby-compiler/core/parse.y" +#line 3258 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = concat_string(p, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8744 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8761 "mrbgems/mruby-compiler/core/y.tab.c" break; case 435: -#line 3248 "mrbgems/mruby-compiler/core/parse.y" +#line 3266 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8752 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8769 "mrbgems/mruby-compiler/core/y.tab.c" break; case 436: -#line 3252 "mrbgems/mruby-compiler/core/parse.y" +#line 3270 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dstr(p, push((yyvsp[-1].nd), (yyvsp[0].nd))); } -#line 8760 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8777 "mrbgems/mruby-compiler/core/y.tab.c" break; case 438: -#line 3259 "mrbgems/mruby-compiler/core/parse.y" +#line 3277 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = append((yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8768 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8785 "mrbgems/mruby-compiler/core/y.tab.c" break; case 439: -#line 3265 "mrbgems/mruby-compiler/core/parse.y" +#line 3283 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 8776 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8793 "mrbgems/mruby-compiler/core/y.tab.c" break; case 440: -#line 3269 "mrbgems/mruby-compiler/core/parse.y" +#line 3287 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = p->lex_strterm; p->lex_strterm = NULL; } -#line 8785 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8802 "mrbgems/mruby-compiler/core/y.tab.c" break; case 441: -#line 3275 "mrbgems/mruby-compiler/core/parse.y" +#line 3293 "mrbgems/mruby-compiler/core/parse.y" { p->lex_strterm = (yyvsp[-2].nd); (yyval.nd) = list2((yyvsp[-3].nd), (yyvsp[-1].nd)); } -#line 8794 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8811 "mrbgems/mruby-compiler/core/y.tab.c" break; case 442: -#line 3280 "mrbgems/mruby-compiler/core/parse.y" +#line 3298 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(new_literal_delim(p)); } -#line 8802 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8819 "mrbgems/mruby-compiler/core/y.tab.c" break; case 443: -#line 3284 "mrbgems/mruby-compiler/core/parse.y" +#line 3302 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1(new_literal_delim(p)); } -#line 8810 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8827 "mrbgems/mruby-compiler/core/y.tab.c" break; case 444: -#line 3290 "mrbgems/mruby-compiler/core/parse.y" +#line 3308 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8818 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8835 "mrbgems/mruby-compiler/core/y.tab.c" break; case 445: -#line 3294 "mrbgems/mruby-compiler/core/parse.y" +#line 3312 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dxstr(p, push((yyvsp[-1].nd), (yyvsp[0].nd))); } -#line 8826 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8843 "mrbgems/mruby-compiler/core/y.tab.c" break; case 446: -#line 3300 "mrbgems/mruby-compiler/core/parse.y" +#line 3318 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 8834 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8851 "mrbgems/mruby-compiler/core/y.tab.c" break; case 447: -#line 3304 "mrbgems/mruby-compiler/core/parse.y" +#line 3322 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_dregx(p, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 8842 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8859 "mrbgems/mruby-compiler/core/y.tab.c" break; case 451: -#line 3317 "mrbgems/mruby-compiler/core/parse.y" +#line 3335 "mrbgems/mruby-compiler/core/parse.y" { parser_heredoc_info * inf = parsing_heredoc_inf(p); inf->doc = push(inf->doc, new_str(p, "", 0)); heredoc_end(p); } -#line 8852 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8869 "mrbgems/mruby-compiler/core/y.tab.c" break; case 452: -#line 3323 "mrbgems/mruby-compiler/core/parse.y" +#line 3341 "mrbgems/mruby-compiler/core/parse.y" { heredoc_end(p); } -#line 8860 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8877 "mrbgems/mruby-compiler/core/y.tab.c" break; case 455: -#line 3333 "mrbgems/mruby-compiler/core/parse.y" +#line 3351 "mrbgems/mruby-compiler/core/parse.y" { parser_heredoc_info * inf = parsing_heredoc_inf(p); inf->doc = push(inf->doc, (yyvsp[0].nd)); heredoc_treat_nextline(p); } -#line 8870 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8887 "mrbgems/mruby-compiler/core/y.tab.c" break; case 456: -#line 3339 "mrbgems/mruby-compiler/core/parse.y" +#line 3357 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = p->lex_strterm; p->lex_strterm = NULL; } -#line 8879 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8896 "mrbgems/mruby-compiler/core/y.tab.c" break; case 457: -#line 3345 "mrbgems/mruby-compiler/core/parse.y" +#line 3363 "mrbgems/mruby-compiler/core/parse.y" { parser_heredoc_info * inf = parsing_heredoc_inf(p); p->lex_strterm = (yyvsp[-2].nd); inf->doc = push(push(inf->doc, (yyvsp[-3].nd)), (yyvsp[-1].nd)); } -#line 8889 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8906 "mrbgems/mruby-compiler/core/y.tab.c" break; case 458: -#line 3353 "mrbgems/mruby-compiler/core/parse.y" +#line 3371 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_words(p, list1((yyvsp[0].nd))); } -#line 8897 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8914 "mrbgems/mruby-compiler/core/y.tab.c" break; case 459: -#line 3357 "mrbgems/mruby-compiler/core/parse.y" +#line 3375 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_words(p, push((yyvsp[-1].nd), (yyvsp[0].nd))); } -#line 8905 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8922 "mrbgems/mruby-compiler/core/y.tab.c" break; case 460: -#line 3364 "mrbgems/mruby-compiler/core/parse.y" +#line 3382 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_ENDARG; (yyval.nd) = new_sym(p, (yyvsp[0].id)); } -#line 8914 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8931 "mrbgems/mruby-compiler/core/y.tab.c" break; case 461: -#line 3369 "mrbgems/mruby-compiler/core/parse.y" +#line 3387 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_ENDARG; (yyval.nd) = new_dsym(p, new_dstr(p, push((yyvsp[-1].nd), (yyvsp[0].nd)))); } -#line 8923 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8940 "mrbgems/mruby-compiler/core/y.tab.c" break; case 462: -#line 3376 "mrbgems/mruby-compiler/core/parse.y" +#line 3394 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = (yyvsp[0].id); } -#line 8931 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8948 "mrbgems/mruby-compiler/core/y.tab.c" break; case 467: -#line 3386 "mrbgems/mruby-compiler/core/parse.y" +#line 3404 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = new_strsym(p, (yyvsp[0].nd)); } -#line 8939 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8956 "mrbgems/mruby-compiler/core/y.tab.c" break; case 468: -#line 3390 "mrbgems/mruby-compiler/core/parse.y" +#line 3408 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = new_strsym(p, (yyvsp[0].nd)); } -#line 8947 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8964 "mrbgems/mruby-compiler/core/y.tab.c" break; case 469: -#line 3396 "mrbgems/mruby-compiler/core/parse.y" +#line 3414 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_symbols(p, list1((yyvsp[0].nd))); } -#line 8955 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8972 "mrbgems/mruby-compiler/core/y.tab.c" break; case 470: -#line 3400 "mrbgems/mruby-compiler/core/parse.y" +#line 3418 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_symbols(p, push((yyvsp[-1].nd), (yyvsp[0].nd))); } -#line 8963 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8980 "mrbgems/mruby-compiler/core/y.tab.c" break; case 473: -#line 3408 "mrbgems/mruby-compiler/core/parse.y" +#line 3426 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = negate_lit(p, (yyvsp[0].nd)); } -#line 8971 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8988 "mrbgems/mruby-compiler/core/y.tab.c" break; case 474: -#line 3412 "mrbgems/mruby-compiler/core/parse.y" +#line 3430 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = negate_lit(p, (yyvsp[0].nd)); } -#line 8979 "mrbgems/mruby-compiler/core/y.tab.c" +#line 8996 "mrbgems/mruby-compiler/core/y.tab.c" break; case 475: -#line 3418 "mrbgems/mruby-compiler/core/parse.y" +#line 3436 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_lvar(p, (yyvsp[0].id)); } -#line 8987 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9004 "mrbgems/mruby-compiler/core/y.tab.c" break; case 476: -#line 3422 "mrbgems/mruby-compiler/core/parse.y" +#line 3440 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_ivar(p, (yyvsp[0].id)); } -#line 8995 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9012 "mrbgems/mruby-compiler/core/y.tab.c" break; case 477: -#line 3426 "mrbgems/mruby-compiler/core/parse.y" +#line 3444 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_gvar(p, (yyvsp[0].id)); } -#line 9003 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9020 "mrbgems/mruby-compiler/core/y.tab.c" break; case 478: -#line 3430 "mrbgems/mruby-compiler/core/parse.y" +#line 3448 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_cvar(p, (yyvsp[0].id)); } -#line 9011 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9028 "mrbgems/mruby-compiler/core/y.tab.c" break; case 479: -#line 3434 "mrbgems/mruby-compiler/core/parse.y" +#line 3452 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_const(p, (yyvsp[0].id)); } -#line 9019 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9036 "mrbgems/mruby-compiler/core/y.tab.c" break; case 480: -#line 3440 "mrbgems/mruby-compiler/core/parse.y" +#line 3458 "mrbgems/mruby-compiler/core/parse.y" { assignable(p, (yyvsp[0].nd)); } -#line 9027 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9044 "mrbgems/mruby-compiler/core/y.tab.c" break; case 481: -#line 3444 "mrbgems/mruby-compiler/core/parse.y" +#line 3462 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "can't assign to numbered parameter"); } -#line 9035 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9052 "mrbgems/mruby-compiler/core/y.tab.c" break; case 482: -#line 3450 "mrbgems/mruby-compiler/core/parse.y" +#line 3468 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = var_reference(p, (yyvsp[0].nd)); } -#line 9043 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9060 "mrbgems/mruby-compiler/core/y.tab.c" break; case 483: -#line 3454 "mrbgems/mruby-compiler/core/parse.y" +#line 3472 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_nil(p); } -#line 9051 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9068 "mrbgems/mruby-compiler/core/y.tab.c" break; case 484: -#line 3458 "mrbgems/mruby-compiler/core/parse.y" +#line 3476 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_self(p); } -#line 9059 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9076 "mrbgems/mruby-compiler/core/y.tab.c" break; case 485: -#line 3462 "mrbgems/mruby-compiler/core/parse.y" +#line 3480 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_true(p); } -#line 9067 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9084 "mrbgems/mruby-compiler/core/y.tab.c" break; case 486: -#line 3466 "mrbgems/mruby-compiler/core/parse.y" +#line 3484 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_false(p); } -#line 9075 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9092 "mrbgems/mruby-compiler/core/y.tab.c" break; case 487: -#line 3470 "mrbgems/mruby-compiler/core/parse.y" +#line 3488 "mrbgems/mruby-compiler/core/parse.y" { const char *fn = mrb_sym_name_len(p->mrb, p->filename_sym, NULL); if (!fn) { @@ -9083,22 +9100,22 @@ yyreduce: } (yyval.nd) = new_str(p, fn, strlen(fn)); } -#line 9087 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9104 "mrbgems/mruby-compiler/core/y.tab.c" break; case 488: -#line 3478 "mrbgems/mruby-compiler/core/parse.y" +#line 3496 "mrbgems/mruby-compiler/core/parse.y" { char buf[16]; dump_int(p->lineno, buf); (yyval.nd) = new_int(p, buf, 10, 0); } -#line 9098 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9115 "mrbgems/mruby-compiler/core/y.tab.c" break; case 489: -#line 3485 "mrbgems/mruby-compiler/core/parse.y" +#line 3503 "mrbgems/mruby-compiler/core/parse.y" { #ifdef MRB_UTF8_STRING const char *enc = "UTF-8"; @@ -9107,46 +9124,46 @@ yyreduce: #endif (yyval.nd) = new_str(p, enc, strlen(enc)); } -#line 9111 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9128 "mrbgems/mruby-compiler/core/y.tab.c" break; case 492: -#line 3500 "mrbgems/mruby-compiler/core/parse.y" +#line 3518 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 9119 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9136 "mrbgems/mruby-compiler/core/y.tab.c" break; case 493: -#line 3504 "mrbgems/mruby-compiler/core/parse.y" +#line 3522 "mrbgems/mruby-compiler/core/parse.y" { p->lstate = EXPR_BEG; p->cmd_start = TRUE; } -#line 9128 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9145 "mrbgems/mruby-compiler/core/y.tab.c" break; case 494: -#line 3509 "mrbgems/mruby-compiler/core/parse.y" +#line 3527 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 9136 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9153 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 495: -#line 3520 "mrbgems/mruby-compiler/core/parse.y" + case 497: +#line 3543 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); p->lstate = EXPR_BEG; p->cmd_start = TRUE; } -#line 9146 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9163 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 496: -#line 3526 "mrbgems/mruby-compiler/core/parse.y" + case 498: +#line 3549 "mrbgems/mruby-compiler/core/parse.y" { #if 1 /* til real keyword args implemented */ @@ -9164,11 +9181,11 @@ yyreduce: new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b)); #endif } -#line 9168 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9185 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 497: -#line 3544 "mrbgems/mruby-compiler/core/parse.y" + case 499: +#line 3567 "mrbgems/mruby-compiler/core/parse.y" { #if 1 /* til real keyword args implemented */ @@ -9186,504 +9203,504 @@ yyreduce: new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b)); #endif } -#line 9190 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9207 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 499: -#line 3565 "mrbgems/mruby-compiler/core/parse.y" + case 501: +#line 3588 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 9198 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9215 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 500: -#line 3571 "mrbgems/mruby-compiler/core/parse.y" + case 502: +#line 3594 "mrbgems/mruby-compiler/core/parse.y" { local_nest(p); } -#line 9206 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9223 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 501: -#line 3577 "mrbgems/mruby-compiler/core/parse.y" + case 503: +#line 3600 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = new_kw_arg(p, (yyvsp[-1].id), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 9216 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9233 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 502: -#line 3583 "mrbgems/mruby-compiler/core/parse.y" + case 504: +#line 3606 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_kw_arg(p, (yyvsp[0].id), 0); local_unnest(p); } -#line 9225 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9242 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 503: -#line 3590 "mrbgems/mruby-compiler/core/parse.y" + case 505: +#line 3613 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_kw_arg(p, (yyvsp[-1].id), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 9234 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9251 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 504: -#line 3595 "mrbgems/mruby-compiler/core/parse.y" + case 506: +#line 3618 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_kw_arg(p, (yyvsp[0].id), 0); local_unnest(p); } -#line 9243 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9260 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 505: -#line 3602 "mrbgems/mruby-compiler/core/parse.y" + case 507: +#line 3625 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 9251 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9268 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 506: -#line 3606 "mrbgems/mruby-compiler/core/parse.y" + case 508: +#line 3629 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9259 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9276 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 507: -#line 3612 "mrbgems/mruby-compiler/core/parse.y" + case 509: +#line 3635 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 9267 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9284 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 508: -#line 3616 "mrbgems/mruby-compiler/core/parse.y" + case 510: +#line 3639 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9275 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9292 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 511: -#line 3626 "mrbgems/mruby-compiler/core/parse.y" + case 513: +#line 3649 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_kw_rest_args(p, nsym((yyvsp[0].id))); } -#line 9283 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9300 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 512: -#line 3630 "mrbgems/mruby-compiler/core/parse.y" + case 514: +#line 3653 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_kw_rest_args(p, 0); } -#line 9291 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9308 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 513: -#line 3636 "mrbgems/mruby-compiler/core/parse.y" + case 515: +#line 3659 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-3].nd), (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 9299 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9316 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 514: -#line 3640 "mrbgems/mruby-compiler/core/parse.y" + case 516: +#line 3663 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, (yyvsp[-1].nd), 0, (yyvsp[0].id)); } -#line 9307 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9324 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 515: -#line 3644 "mrbgems/mruby-compiler/core/parse.y" + case 517: +#line 3667 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, (yyvsp[-1].nd), (yyvsp[0].id)); } -#line 9315 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9332 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 516: -#line 3648 "mrbgems/mruby-compiler/core/parse.y" + case 518: +#line 3671 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, (yyvsp[0].id)); } -#line 9323 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9340 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 517: -#line 3654 "mrbgems/mruby-compiler/core/parse.y" + case 519: +#line 3677 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); } -#line 9331 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9348 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 518: -#line 3658 "mrbgems/mruby-compiler/core/parse.y" + case 520: +#line 3681 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args_tail(p, 0, 0, 0); } -#line 9339 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9356 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 519: -#line 3664 "mrbgems/mruby-compiler/core/parse.y" + case 521: +#line 3687 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9347 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9364 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 520: -#line 3668 "mrbgems/mruby-compiler/core/parse.y" + case 522: +#line 3691 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-7].nd), (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9355 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9372 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 521: -#line 3672 "mrbgems/mruby-compiler/core/parse.y" + case 523: +#line 3695 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 9363 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9380 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 522: -#line 3676 "mrbgems/mruby-compiler/core/parse.y" + case 524: +#line 3699 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9371 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9388 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 523: -#line 3680 "mrbgems/mruby-compiler/core/parse.y" + case 525: +#line 3703 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9379 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9396 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 524: -#line 3684 "mrbgems/mruby-compiler/core/parse.y" + case 526: +#line 3707 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-5].nd), 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9387 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9404 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 525: -#line 3688 "mrbgems/mruby-compiler/core/parse.y" + case 527: +#line 3711 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, (yyvsp[-1].nd), 0, 0, 0, (yyvsp[0].nd)); } -#line 9395 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9412 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 526: -#line 3692 "mrbgems/mruby-compiler/core/parse.y" + case 528: +#line 3715 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9403 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9420 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 527: -#line 3696 "mrbgems/mruby-compiler/core/parse.y" + case 529: +#line 3719 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9411 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9428 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 528: -#line 3700 "mrbgems/mruby-compiler/core/parse.y" + case 530: +#line 3723 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd)); } -#line 9419 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9436 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 529: -#line 3704 "mrbgems/mruby-compiler/core/parse.y" + case 531: +#line 3727 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9427 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9444 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 530: -#line 3708 "mrbgems/mruby-compiler/core/parse.y" + case 532: +#line 3731 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-1].id), 0, (yyvsp[0].nd)); } -#line 9435 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9452 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 531: -#line 3712 "mrbgems/mruby-compiler/core/parse.y" + case 533: +#line 3735 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd)); } -#line 9443 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9460 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 532: -#line 3716 "mrbgems/mruby-compiler/core/parse.y" + case 534: +#line 3739 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_args(p, 0, 0, 0, 0, (yyvsp[0].nd)); } -#line 9451 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9468 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 533: -#line 3720 "mrbgems/mruby-compiler/core/parse.y" + case 535: +#line 3743 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, intern_op(and)); (yyval.nd) = new_args(p, 0, 0, 0, 0, 0); } -#line 9460 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9477 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 534: -#line 3727 "mrbgems/mruby-compiler/core/parse.y" + case 536: +#line 3750 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "formal argument cannot be a constant"); (yyval.nd) = 0; } -#line 9469 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9486 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 535: -#line 3732 "mrbgems/mruby-compiler/core/parse.y" + case 537: +#line 3755 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "formal argument cannot be an instance variable"); (yyval.nd) = 0; } -#line 9478 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9495 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 536: -#line 3737 "mrbgems/mruby-compiler/core/parse.y" + case 538: +#line 3760 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "formal argument cannot be a global variable"); (yyval.nd) = 0; } -#line 9487 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9504 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 537: -#line 3742 "mrbgems/mruby-compiler/core/parse.y" + case 539: +#line 3765 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "formal argument cannot be a class variable"); (yyval.nd) = 0; } -#line 9496 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9513 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 538: -#line 3747 "mrbgems/mruby-compiler/core/parse.y" + case 540: +#line 3770 "mrbgems/mruby-compiler/core/parse.y" { yyerror(p, "formal argument cannot be a numbered parameter"); (yyval.nd) = 0; } -#line 9505 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9522 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 539: -#line 3754 "mrbgems/mruby-compiler/core/parse.y" + case 541: +#line 3777 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = 0; } -#line 9513 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9530 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 540: -#line 3758 "mrbgems/mruby-compiler/core/parse.y" + case 542: +#line 3781 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, (yyvsp[0].id)); (yyval.id) = (yyvsp[0].id); } -#line 9522 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9539 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 541: -#line 3765 "mrbgems/mruby-compiler/core/parse.y" + case 543: +#line 3788 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_arg(p, (yyvsp[0].id)); } -#line 9530 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9547 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 542: -#line 3769 "mrbgems/mruby-compiler/core/parse.y" + case 544: +#line 3792 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = local_switch(p); } -#line 9538 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9555 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 543: -#line 3773 "mrbgems/mruby-compiler/core/parse.y" + case 545: +#line 3796 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = new_masgn_param(p, (yyvsp[-1].nd), p->locals->car); local_resume(p, (yyvsp[-2].nd)); local_add_f(p, 0); } -#line 9548 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9565 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 544: -#line 3781 "mrbgems/mruby-compiler/core/parse.y" + case 546: +#line 3804 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 9556 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9573 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 545: -#line 3785 "mrbgems/mruby-compiler/core/parse.y" + case 547: +#line 3808 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9564 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9581 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 546: -#line 3791 "mrbgems/mruby-compiler/core/parse.y" + case 548: +#line 3814 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, (yyvsp[-1].id)); local_nest(p); (yyval.id) = (yyvsp[-1].id); } -#line 9574 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9591 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 547: -#line 3799 "mrbgems/mruby-compiler/core/parse.y" + case 549: +#line 3822 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(nsym((yyvsp[-1].id)), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 9584 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9601 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 548: -#line 3807 "mrbgems/mruby-compiler/core/parse.y" + case 550: +#line 3830 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(nsym((yyvsp[-1].id)), cons((yyvsp[0].nd), locals_node(p))); local_unnest(p); } -#line 9594 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9611 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 549: -#line 3815 "mrbgems/mruby-compiler/core/parse.y" + case 551: +#line 3838 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 9602 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9619 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 550: -#line 3819 "mrbgems/mruby-compiler/core/parse.y" + case 552: +#line 3842 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9610 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9627 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 551: -#line 3825 "mrbgems/mruby-compiler/core/parse.y" + case 553: +#line 3848 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); } -#line 9618 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9635 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 552: -#line 3829 "mrbgems/mruby-compiler/core/parse.y" + case 554: +#line 3852 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9626 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9643 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 555: -#line 3839 "mrbgems/mruby-compiler/core/parse.y" + case 557: +#line 3862 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, (yyvsp[0].id)); (yyval.id) = (yyvsp[0].id); } -#line 9635 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9652 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 556: -#line 3844 "mrbgems/mruby-compiler/core/parse.y" + case 558: +#line 3867 "mrbgems/mruby-compiler/core/parse.y" { local_add_f(p, intern_op(mul)); (yyval.id) = -1; } -#line 9644 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9661 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 559: -#line 3855 "mrbgems/mruby-compiler/core/parse.y" + case 561: +#line 3878 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = (yyvsp[0].id); } -#line 9652 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9669 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 560: -#line 3861 "mrbgems/mruby-compiler/core/parse.y" + case 562: +#line 3884 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = (yyvsp[0].id); } -#line 9660 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9677 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 561: -#line 3865 "mrbgems/mruby-compiler/core/parse.y" + case 563: +#line 3888 "mrbgems/mruby-compiler/core/parse.y" { (yyval.id) = 0; } -#line 9668 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9685 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 562: -#line 3871 "mrbgems/mruby-compiler/core/parse.y" + case 564: +#line 3894 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[0].nd); if (!(yyval.nd)) (yyval.nd) = new_nil(p); } -#line 9677 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9694 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 563: -#line 3875 "mrbgems/mruby-compiler/core/parse.y" + case 565: +#line 3898 "mrbgems/mruby-compiler/core/parse.y" {p->lstate = EXPR_BEG;} -#line 9683 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9700 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 564: -#line 3876 "mrbgems/mruby-compiler/core/parse.y" + case 566: +#line 3899 "mrbgems/mruby-compiler/core/parse.y" { if ((yyvsp[-1].nd) == 0) { yyerror(p, "can't define singleton method for ()."); @@ -9706,55 +9723,55 @@ yyreduce: } (yyval.nd) = (yyvsp[-1].nd); } -#line 9710 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9727 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 566: -#line 3902 "mrbgems/mruby-compiler/core/parse.y" + case 568: +#line 3925 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = (yyvsp[-1].nd); } -#line 9718 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9735 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 567: -#line 3908 "mrbgems/mruby-compiler/core/parse.y" + case 569: +#line 3931 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = list1((yyvsp[0].nd)); NODE_LINENO((yyval.nd), (yyvsp[0].nd)); } -#line 9727 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9744 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 568: -#line 3913 "mrbgems/mruby-compiler/core/parse.y" + case 570: +#line 3936 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9735 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9752 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 571: -#line 3923 "mrbgems/mruby-compiler/core/parse.y" + case 573: +#line 3946 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[-2].nd)); void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons((yyvsp[-2].nd), (yyvsp[0].nd)); } -#line 9745 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9762 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 572: -#line 3929 "mrbgems/mruby-compiler/core/parse.y" + case 574: +#line 3952 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(new_sym(p, (yyvsp[-2].id)), (yyvsp[0].nd)); } -#line 9754 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9771 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 573: -#line 3934 "mrbgems/mruby-compiler/core/parse.y" + case 575: +#line 3957 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); if (typen((yyvsp[-2].nd)->car) == NODE_DSTR) { @@ -9764,67 +9781,67 @@ yyreduce: (yyval.nd) = cons(new_sym(p, new_strsym(p, (yyvsp[-2].nd))), (yyvsp[0].nd)); } } -#line 9768 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9785 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 574: -#line 3944 "mrbgems/mruby-compiler/core/parse.y" + case 576: +#line 3967 "mrbgems/mruby-compiler/core/parse.y" { void_expr_error(p, (yyvsp[0].nd)); (yyval.nd) = cons(new_kw_rest_args(p, 0), (yyvsp[0].nd)); } -#line 9777 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9794 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 587: -#line 3971 "mrbgems/mruby-compiler/core/parse.y" + case 589: +#line 3994 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = '.'; } -#line 9785 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9802 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 588: -#line 3975 "mrbgems/mruby-compiler/core/parse.y" + case 590: +#line 3998 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = 0; } -#line 9793 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9810 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 590: -#line 3982 "mrbgems/mruby-compiler/core/parse.y" + case 592: +#line 4005 "mrbgems/mruby-compiler/core/parse.y" { (yyval.num) = tCOLON2; } -#line 9801 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9818 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 599: -#line 4003 "mrbgems/mruby-compiler/core/parse.y" + case 601: +#line 4026 "mrbgems/mruby-compiler/core/parse.y" {yyerrok;} -#line 9807 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9824 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 602: -#line 4009 "mrbgems/mruby-compiler/core/parse.y" + case 604: +#line 4032 "mrbgems/mruby-compiler/core/parse.y" { p->lineno += (yyvsp[0].num); p->column = 0; } -#line 9816 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9833 "mrbgems/mruby-compiler/core/y.tab.c" break; - case 605: -#line 4020 "mrbgems/mruby-compiler/core/parse.y" + case 607: +#line 4043 "mrbgems/mruby-compiler/core/parse.y" { (yyval.nd) = 0; } -#line 9824 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9841 "mrbgems/mruby-compiler/core/y.tab.c" break; -#line 9828 "mrbgems/mruby-compiler/core/y.tab.c" +#line 9845 "mrbgems/mruby-compiler/core/y.tab.c" default: break; } @@ -10056,7 +10073,7 @@ yyreturn: #endif return yyresult; } -#line 4024 "mrbgems/mruby-compiler/core/parse.y" +#line 4047 "mrbgems/mruby-compiler/core/parse.y" #define pylval (*((YYSTYPE*)(p->ylval))) @@ -10718,6 +10735,7 @@ heredoc_remove_indent(parser_state *p, parser_heredoc_info *hinf) start = 0; while (start < len) { end = escaped ? (size_t)escaped->car : len; + if (end > len) end = len; spaces = (size_t)nspaces->car; size_t esclen = end - start; heredoc_count_indent(hinf, str + start, esclen, spaces, &offset); diff --git a/mrbgems/mruby-complex/mrblib/complex.rb b/mrbgems/mruby-complex/mrblib/complex.rb index 67f940865..f54151c7b 100644 --- a/mrbgems/mruby-complex/mrblib/complex.rb +++ b/mrbgems/mruby-complex/mrblib/complex.rb @@ -97,6 +97,10 @@ class Complex < Numeric end alias_method :rect, :rectangular + def to_c + self + end + def to_r raise RangeError.new "can't convert #{to_s} into Rational" unless imaginary.zero? Rational(real, 1) @@ -105,8 +109,8 @@ class Complex < Numeric alias_method :imag, :imaginary [Integer, Float].each do |cls| - [:+, :-, :*, :/, :==].each do |op| - cls.instance_eval do + cls.class_eval do + [:+, :-, :*, :/, :==].each do |op| original_operator_name = :"__original_operator_#{op}_complex" alias_method original_operator_name, op define_method op do |rhs| @@ -119,4 +123,10 @@ class Complex < Numeric end end end + Numeric.class_eval do + def i + Complex(0, self) + end + end + undef i end diff --git a/mrbgems/mruby-complex/src/complex.c b/mrbgems/mruby-complex/src/complex.c index 5305e09d8..e4143a762 100644 --- a/mrbgems/mruby-complex/src/complex.c +++ b/mrbgems/mruby-complex/src/complex.c @@ -67,8 +67,17 @@ complex_ptr(mrb_state *mrb, mrb_value v) } #endif -static mrb_value -complex_new(mrb_state *mrb, mrb_float real, mrb_float imaginary) +void +mrb_complex_get(mrb_state *mrb, mrb_value cpx, mrb_float *r, mrb_float *i) +{ + struct mrb_complex *c = complex_ptr(mrb, cpx); + + *r = c->real; + *i = c->imaginary; +} + +mrb_value +mrb_complex_new(mrb_state *mrb, mrb_float real, mrb_float imaginary) { struct RClass *c = mrb_class_get_id(mrb, MRB_SYM(Complex)); struct mrb_complex *p; @@ -80,6 +89,8 @@ complex_new(mrb_state *mrb, mrb_float real, mrb_float imaginary) return mrb_obj_value(comp); } +#define complex_new(mrb, real, imag) mrb_complex_new(mrb, real, imag) + static mrb_value complex_real(mrb_state *mrb, mrb_value self) { @@ -225,7 +236,7 @@ void mrb_mruby_complex_gem_init(mrb_state *mrb) #ifdef COMPLEX_USE_ISTRUCT mrb_assert(sizeof(struct mrb_complex) < ISTRUCT_DATA_SIZE); #endif - comp = mrb_define_class(mrb, "Complex", mrb_class_get_id(mrb, MRB_SYM(Numeric))); + comp = mrb_define_class_id(mrb, MRB_SYM(Complex), mrb_class_get_id(mrb, MRB_SYM(Numeric))); #ifdef COMPLEX_USE_ISTRUCT MRB_SET_INSTANCE_TT(comp, MRB_TT_ISTRUCT); #else diff --git a/mrbgems/mruby-eval/src/eval.c b/mrbgems/mruby-eval/src/eval.c index 08ef8d937..978d4fc30 100644 --- a/mrbgems/mruby-eval/src/eval.c +++ b/mrbgems/mruby-eval/src/eval.c @@ -6,12 +6,13 @@ #include <mruby/opcode.h> #include <mruby/error.h> #include <mruby/presym.h> +#include <mruby/variable.h> struct REnv *mrb_env_new(mrb_state *mrb, struct mrb_context *c, mrb_callinfo *ci, int nstacks, mrb_value *stack, struct RClass *tc); -mrb_value mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p); +mrb_value mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p, mrb_func_t posthook); mrb_value mrb_obj_instance_eval(mrb_state *mrb, mrb_value self); - void mrb_codedump_all(mrb_state*, struct RProc*); +void mrb_proc_merge_lvar(mrb_state *mrb, mrb_irep *irep, struct REnv *env, int num, const mrb_sym *lv, const mrb_value *stack); static struct RProc* create_proc_from_string(mrb_state *mrb, const char *s, mrb_int len, mrb_value binding, const char *file, mrb_int line) @@ -19,12 +20,36 @@ create_proc_from_string(mrb_state *mrb, const char *s, mrb_int len, mrb_value bi mrbc_context *cxt; struct mrb_parser_state *p; struct RProc *proc; + const struct RProc *scope; struct REnv *e; mrb_callinfo *ci; /* callinfo of eval caller */ struct RClass *target_class = NULL; + struct mrb_context *c = mrb->c; if (!mrb_nil_p(binding)) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "Binding of eval must be nil."); + mrb_value scope_obj; + if (!mrb_class_defined_id(mrb, MRB_SYM(Binding)) + || !mrb_obj_is_kind_of(mrb, binding, mrb_class_get_id(mrb, MRB_SYM(Binding)))) { + mrb_raisef(mrb, E_TYPE_ERROR, "wrong argument type %C (expected binding)", + mrb_obj_class(mrb, binding)); + } + scope_obj = mrb_iv_get(mrb, binding, MRB_SYM(proc)); + mrb_assert(mrb_proc_p(scope_obj)); + scope = mrb_proc_ptr(scope_obj); + if (MRB_PROC_CFUNC_P(scope)) { + e = NULL; + } + else { + mrb_value env = mrb_iv_get(mrb, binding, MRB_SYM(env)); + mrb_assert(mrb_env_p(env)); + e = (struct REnv *)mrb_obj_ptr(env); + mrb_assert(e != NULL); + } + } + else { + ci = (c->ci > c->cibase) ? c->ci - 1 : c->cibase; + scope = ci->proc; + e = NULL; } cxt = mrbc_context_new(mrb); @@ -33,8 +58,7 @@ create_proc_from_string(mrb_state *mrb, const char *s, mrb_int len, mrb_value bi mrbc_filename(mrb, cxt, file ? file : "(eval)"); cxt->capture_errors = TRUE; cxt->no_optimize = TRUE; - ci = (mrb->c->ci > mrb->c->cibase) ? mrb->c->ci - 1 : mrb->c->cibase; - cxt->upper = ci->proc && MRB_PROC_CFUNC_P(ci->proc) ? NULL : ci->proc; + cxt->upper = scope && MRB_PROC_CFUNC_P(scope) ? NULL : scope; p = mrb_parse_nstring(mrb, s, len, cxt); @@ -70,28 +94,29 @@ create_proc_from_string(mrb_state *mrb, const char *s, mrb_int len, mrb_value bi mrbc_context_free(mrb, cxt); mrb_raise(mrb, E_SCRIPT_ERROR, "codegen error"); } - if (mrb->c->ci > mrb->c->cibase) { - ci = &mrb->c->ci[-1]; + if (c->ci > c->cibase) { + ci = &c->ci[-1]; } else { - ci = mrb->c->cibase; - } - if (ci->proc) { - target_class = MRB_PROC_TARGET_CLASS(ci->proc); + ci = c->cibase; } - if (ci->proc && !MRB_PROC_CFUNC_P(ci->proc)) { - if ((e = mrb_vm_ci_env(ci)) != NULL) { - /* do nothing, because e is assigned already */ - } - else { - e = mrb_env_new(mrb, mrb->c, ci, ci->proc->body.irep->nlocals, ci->stack, target_class); - ci->u.env = e; + if (scope) { + target_class = MRB_PROC_TARGET_CLASS(scope); + if (!MRB_PROC_CFUNC_P(scope)) { + if (e == NULL) { + /* when `binding` is nil */ + e = mrb_vm_ci_env(ci); + if (e == NULL) { + e = mrb_env_new(mrb, c, ci, ci->proc->body.irep->nlocals, ci->stack, target_class); + ci->u.env = e; + } + } + proc->e.env = e; + proc->flags |= MRB_PROC_ENVSET; + mrb_field_write_barrier(mrb, (struct RBasic*)proc, (struct RBasic*)e); } - proc->e.env = e; - proc->flags |= MRB_PROC_ENVSET; - mrb_field_write_barrier(mrb, (struct RBasic*)proc, (struct RBasic*)e); } - proc->upper = ci->proc; + proc->upper = scope; mrb_vm_ci_target_class_set(mrb->c->ci, target_class); /* mrb_codedump_all(mrb, proc); */ @@ -102,7 +127,7 @@ create_proc_from_string(mrb_state *mrb, const char *s, mrb_int len, mrb_value bi } static mrb_value -exec_irep(mrb_state *mrb, mrb_value self, struct RProc *proc) +exec_irep(mrb_state *mrb, mrb_value self, struct RProc *proc, mrb_func_t posthook) { /* no argument passed from eval() */ mrb->c->ci->argc = 0; @@ -117,7 +142,38 @@ exec_irep(mrb_state *mrb, mrb_value self, struct RProc *proc) } /* clear block */ mrb->c->ci->stack[1] = mrb_nil_value(); - return mrb_exec_irep(mrb, self, proc); + return mrb_exec_irep(mrb, self, proc, posthook); +} + +static void +eval_merge_lvar(mrb_state *mrb, mrb_irep *irep, struct REnv *env, int num, const mrb_sym *lv, const mrb_value *stack) +{ + mrb_assert(mrb->c->stend >= stack + num); + mrb_proc_merge_lvar(mrb, irep, env, num, lv, stack); +} + +static mrb_value +eval_merge_lvar_hook(mrb_state *mrb, mrb_value dummy_self) +{ + const mrb_callinfo *orig_ci = &mrb->c->ci[1]; + const struct RProc *orig_proc = orig_ci->proc; + const mrb_irep *orig_irep = orig_proc->body.irep; + int orig_nlocals = orig_irep->nlocals; + + if (orig_nlocals > 1) { + struct RProc *proc = (struct RProc *)orig_proc->upper; + struct REnv *env = MRB_PROC_ENV(orig_proc); + eval_merge_lvar(mrb, (mrb_irep *)proc->body.irep, env, + orig_nlocals - 1, orig_irep->lv, + mrb->c->ci->stack + 3 /* hook proc + exc + ret val */); + } + + mrb_value exc = mrb->c->ci->stack[1]; + if (!mrb_nil_p(exc)) { + mrb_exc_raise(mrb, exc); + } + + return mrb->c->ci->stack[2]; } static mrb_value @@ -129,12 +185,19 @@ f_eval(mrb_state *mrb, mrb_value self) const char *file = NULL; mrb_int line = 1; struct RProc *proc; + mrb_func_t posthook = NULL; mrb_get_args(mrb, "s|ozi", &s, &len, &binding, &file, &line); proc = create_proc_from_string(mrb, s, len, binding, file, line); + if (!mrb_nil_p(binding)) { + self = mrb_iv_get(mrb, binding, MRB_SYM(recv)); + if (mrb_env_p(mrb_iv_get(mrb, binding, MRB_SYM(env)))) { + posthook = eval_merge_lvar_hook; + } + } mrb_assert(!MRB_PROC_CFUNC_P(proc)); - return exec_irep(mrb, self, proc); + return exec_irep(mrb, self, proc, posthook); } static mrb_value @@ -159,7 +222,7 @@ f_instance_eval(mrb_state *mrb, mrb_value self) MRB_PROC_SET_TARGET_CLASS(proc, mrb_class_ptr(cv)); mrb_assert(!MRB_PROC_CFUNC_P(proc)); mrb_vm_ci_target_class_set(mrb->c->ci, mrb_class_ptr(cv)); - return exec_irep(mrb, self, proc); + return exec_irep(mrb, self, proc, NULL); } else { mrb_get_args(mrb, "&", &b); @@ -171,7 +234,7 @@ void mrb_mruby_eval_gem_init(mrb_state* mrb) { mrb_define_module_function(mrb, mrb->kernel_module, "eval", f_eval, MRB_ARGS_ARG(1, 3)); - mrb_define_method(mrb, mrb_class_get_id(mrb, MRB_SYM(BasicObject)), "instance_eval", f_instance_eval, MRB_ARGS_OPT(3)|MRB_ARGS_BLOCK()); + mrb_define_method_id(mrb, mrb_class_get_id(mrb, MRB_SYM(BasicObject)), MRB_SYM(instance_eval), f_instance_eval, MRB_ARGS_OPT(3)|MRB_ARGS_BLOCK()); } void diff --git a/mrbgems/mruby-eval/test/eval.rb b/mrbgems/mruby-eval/test/eval.rb index 639ed68f9..e95171223 100644 --- a/mrbgems/mruby-eval/test/eval.rb +++ b/mrbgems/mruby-eval/test/eval.rb @@ -44,7 +44,7 @@ assert('Kernel#eval', '15.3.1.3.12') do end assert('rest arguments of eval') do - assert_raise(ArgumentError) { Kernel.eval('0', 0, 'test', 0) } + assert_raise(TypeError) { Kernel.eval('0', 0, 'test', 0) } assert_equal ['test', 'test.rb', 10] do Kernel.eval('[\'test\', __FILE__, __LINE__]', nil, 'test.rb', 10) end diff --git a/mrbgems/mruby-hash-ext/src/hash-ext.c b/mrbgems/mruby-hash-ext/src/hash-ext.c index 6345420ed..9c85858fe 100644 --- a/mrbgems/mruby-hash-ext/src/hash-ext.c +++ b/mrbgems/mruby-hash-ext/src/hash-ext.c @@ -74,7 +74,7 @@ hash_slice(mrb_state *mrb, mrb_value hash) * hsh.except(*keys) -> a_hash * * Returns a hash excluding the given keys and their values. - * + * * h = { a: 100, b: 200, c: 300 } * h.except(:a) #=> {:b=>200, :c=>300} * h.except(:b, :c, :d) #=> {:a=>100} diff --git a/mrbgems/mruby-io/include/mruby/ext/io.h b/mrbgems/mruby-io/include/mruby/ext/io.h index 340b20562..714f58fd1 100644 --- a/mrbgems/mruby-io/include/mruby/ext/io.h +++ b/mrbgems/mruby-io/include/mruby/ext/io.h @@ -59,8 +59,8 @@ struct mrb_io { #define MRB_O_READABLE_P(f) ((mrb_bool)((((f) & MRB_O_ACCMODE) | 2) == 2)) #define MRB_O_WRITABLE_P(f) ((mrb_bool)(((((f) & MRB_O_ACCMODE) + 1) & 2) == 2)) -#define E_IO_ERROR (mrb_class_get(mrb, "IOError")) -#define E_EOF_ERROR (mrb_class_get(mrb, "EOFError")) +#define E_IO_ERROR (mrb_exc_get(mrb, "IOError")) +#define E_EOF_ERROR (mrb_exc_get(mrb, "EOFError")) int mrb_io_fileno(mrb_state *mrb, mrb_value io); diff --git a/mrbgems/mruby-io/src/file.c b/mrbgems/mruby-io/src/file.c index 8e7d64958..03a6a070d 100644 --- a/mrbgems/mruby-io/src/file.c +++ b/mrbgems/mruby-io/src/file.c @@ -593,7 +593,7 @@ mrb_init_file(mrb_state *mrb) { struct RClass *io, *file, *cnst; - io = mrb_class_get(mrb, "IO"); + io = mrb_class_get_id(mrb, MRB_SYM(IO)); file = mrb_define_class(mrb, "File", io); MRB_SET_INSTANCE_TT(file, MRB_TT_DATA); mrb_define_class_method(mrb, file, "umask", mrb_file_s_umask, MRB_ARGS_OPT(1)); diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index 0469c0545..d29f839f9 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -88,10 +88,10 @@ io_get_open_fptr(mrb_state *mrb, mrb_value self) fptr = (struct mrb_io *)mrb_data_get_ptr(mrb, self, &mrb_io_type); if (fptr == NULL) { - mrb_raise(mrb, E_IO_ERROR, "uninitialized stream."); + mrb_raise(mrb, E_IO_ERROR, "uninitialized stream"); } if (fptr->fd < 0) { - mrb_raise(mrb, E_IO_ERROR, "closed stream."); + mrb_raise(mrb, E_IO_ERROR, "closed stream"); } return fptr; } @@ -581,7 +581,7 @@ mrb_io_s_popen(mrb_state *mrb, mrb_value klass) close(pw[1]); } errno = saved_errno; - mrb_sys_fail(mrb, "pipe_open failed."); + mrb_sys_fail(mrb, "pipe_open failed"); break; } return result; @@ -795,7 +795,7 @@ fptr_finalize(mrb_state *mrb, struct mrb_io *fptr, int quiet) if (!quiet && saved_errno != 0) { errno = saved_errno; - mrb_sys_fail(mrb, "fptr_finalize failed."); + mrb_sys_fail(mrb, "fptr_finalize failed"); } } diff --git a/mrbgems/mruby-math/test/math.rb b/mrbgems/mruby-math/test/math.rb index 959eef788..6ea06151c 100644 --- a/mrbgems/mruby-math/test/math.rb +++ b/mrbgems/mruby-math/test/math.rb @@ -9,27 +9,18 @@ def assert_float_and_int(exp_ary, act_ary) end end -assert('Math.sin 0') do +assert('Math.sin') do assert_float(0, Math.sin(0)) -end - -assert('Math.sin PI/2') do assert_float(1, Math.sin(Math::PI / 2)) end -assert('Math.cos 0') do +assert('Math.cos') do assert_float(1, Math.cos(0)) -end - -assert('Math.cos PI/2') do assert_float(0, Math.cos(Math::PI / 2)) end -assert('Math.tan 0') do +assert('Math.tan') do assert_float(0, Math.tan(0)) -end - -assert('Math.tan PI/4') do assert_float(1, Math.tan(Math::PI / 4)) end @@ -49,52 +40,27 @@ assert('Fundamental trig identities') do end end -assert('Math.erf 0') do - assert_float(0, Math.erf(0)) -end - -assert('Math.exp 0') do +assert('Math.exp') do assert_float(1.0, Math.exp(0)) -end - -assert('Math.exp 1') do assert_float(2.718281828459045, Math.exp(1)) -end - -assert('Math.exp 1.5') do assert_float(4.4816890703380645, Math.exp(1.5)) end -assert('Math.log 1') do +assert('Math.log') do assert_float(0, Math.log(1)) -end - -assert('Math.log E') do assert_float(1.0, Math.log(Math::E)) -end - -assert('Math.log E**3') do assert_float(3.0, Math.log(Math::E**3)) end -assert('Math.log2 1') do +assert('Math.log2') do assert_float(0.0, Math.log2(1)) -end - -assert('Math.log2 2') do assert_float(1.0, Math.log2(2)) end -assert('Math.log10 1') do +assert('Math.log10') do assert_float(0.0, Math.log10(1)) -end - -assert('Math.log10 10') do assert_float(1.0, Math.log10(10)) -end - -assert('Math.log10 10**100') do - assert_float(100.0, Math.log10(10**100)) + assert_float(30.0, Math.log10(10**30)) end assert('Math.sqrt') do @@ -117,19 +83,14 @@ assert('Math.hypot') do assert_float(5.0, Math.hypot(3, 4)) end -assert('Math.erf 1') do +assert('Math.erf') do + assert_float(0, Math.erf(0)) assert_float(0.842700792949715, Math.erf(1)) -end - -assert('Math.erfc 1') do - assert_float(0.157299207050285, Math.erfc(1)) -end - -assert('Math.erf -1') do assert_float(-0.8427007929497148, Math.erf(-1)) end -assert('Math.erfc -1') do +assert('Math.erfc') do + assert_float(0.157299207050285, Math.erfc(1)) assert_float(1.8427007929497148, Math.erfc(-1)) end diff --git a/mrbgems/mruby-metaprog/src/metaprog.c b/mrbgems/mruby-metaprog/src/metaprog.c index f0f544334..4bf31cbeb 100644 --- a/mrbgems/mruby-metaprog/src/metaprog.c +++ b/mrbgems/mruby-metaprog/src/metaprog.c @@ -21,6 +21,8 @@ typedef enum { NOEX_RESPONDS = 0x80 } mrb_method_flag_t; +mrb_value mrb_proc_local_variables(mrb_state *mrb, const struct RProc *proc); + static mrb_value mrb_f_nil(mrb_state *mrb, mrb_value cv) { @@ -133,40 +135,7 @@ mrb_obj_ivar_set(mrb_state *mrb, mrb_value self) static mrb_value mrb_local_variables(mrb_state *mrb, mrb_value self) { - const struct RProc *proc; - const mrb_irep *irep; - mrb_value vars; - size_t i; - - proc = mrb->c->ci[-1].proc; - - if (proc == NULL || MRB_PROC_CFUNC_P(proc)) { - return mrb_ary_new(mrb); - } - vars = mrb_hash_new(mrb); - while (proc) { - if (MRB_PROC_CFUNC_P(proc)) break; - irep = proc->body.irep; - if (irep->lv) { - for (i = 0; i + 1 < irep->nlocals; ++i) { - if (irep->lv[i]) { - mrb_sym sym = irep->lv[i]; - const char *name = mrb_sym_name(mrb, sym); - switch (name[0]) { - case '*': case '&': - break; - default: - mrb_hash_set(mrb, vars, mrb_symbol_value(sym), mrb_true_value()); - break; - } - } - } - } - if (MRB_PROC_SCOPE_P(proc)) break; - proc = proc->upper; - } - - return mrb_hash_keys(mrb, vars); + return mrb_proc_local_variables(mrb, mrb->c->ci[-1].proc); } KHASH_DECLARE(st, mrb_sym, char, FALSE) @@ -205,41 +174,37 @@ method_entry_loop(mrb_state *mrb, struct RClass *klass, khash_t(st) *set, khash_ } static mrb_value -mrb_class_instance_method_list(mrb_state *mrb, mrb_bool recur, struct RClass *klass, int obj) +mrb_class_instance_method_list(mrb_state *mrb, mrb_bool recur, struct RClass *klass) { - khint_t i; mrb_value ary; - mrb_bool prepended = FALSE; struct RClass *oldklass; khash_t(st) *set = kh_init(st, mrb); - khash_t(st) *undef = (recur ? kh_init(st, mrb) : NULL); - if (!recur && (klass->flags & MRB_FL_CLASS_IS_PREPENDED)) { - MRB_CLASS_ORIGIN(klass); - prepended = TRUE; + if (!recur) { + if (klass->flags & MRB_FL_CLASS_IS_PREPENDED) { + MRB_CLASS_ORIGIN(klass); + } + method_entry_loop(mrb, klass, set, NULL); } + else { + khash_t(st) *undef = kh_init(st, mrb); - oldklass = 0; - while (klass && (klass != oldklass)) { - method_entry_loop(mrb, klass, set, undef); - if ((klass->tt == MRB_TT_ICLASS && !prepended) || - (klass->tt == MRB_TT_SCLASS)) { - } - else { - if (!recur) break; + oldklass = NULL; + while (klass && (klass != oldklass)) { + method_entry_loop(mrb, klass, set, undef); + oldklass = klass; + klass = klass->super; } - oldklass = klass; - klass = klass->super; + kh_destroy(st, mrb, undef); } ary = mrb_ary_new_capa(mrb, kh_size(set)); - for (i=0;i<kh_end(set);i++) { + for (khint_t i=0; i<kh_end(set); i++) { if (kh_exist(set, i)) { mrb_ary_push(mrb, ary, mrb_symbol_value(kh_key(set, i))); } } kh_destroy(st, mrb, set); - if (undef) kh_destroy(st, mrb, undef); return ary; } @@ -247,7 +212,7 @@ mrb_class_instance_method_list(mrb_state *mrb, mrb_bool recur, struct RClass *kl static mrb_value mrb_obj_methods(mrb_state *mrb, mrb_bool recur, mrb_value obj, mrb_method_flag_t flag) { - return mrb_class_instance_method_list(mrb, recur, mrb_class(mrb, obj), 0); + return mrb_class_instance_method_list(mrb, recur, mrb_class(mrb, obj)); } /* 15.3.1.3.31 */ /* @@ -607,7 +572,7 @@ mrb_mod_instance_methods(mrb_state *mrb, mrb_value mod) struct RClass *c = mrb_class_ptr(mod); mrb_bool recur = TRUE; mrb_get_args(mrb, "|b", &recur); - return mrb_class_instance_method_list(mrb, recur, c, 0); + return mrb_class_instance_method_list(mrb, recur, c); } /* 15.2.2.4.41 */ diff --git a/mrbgems/mruby-metaprog/test/metaprog.rb b/mrbgems/mruby-metaprog/test/metaprog.rb index 84f4e00a0..d63913020 100644 --- a/mrbgems/mruby-metaprog/test/metaprog.rb +++ b/mrbgems/mruby-metaprog/test/metaprog.rb @@ -64,6 +64,8 @@ end assert('Kernel#methods', '15.3.1.3.31') do assert_equal Array, methods.class + assert_equal [:foo], Class.new{def self.foo; end}.methods(false) + assert_equal [], Class.new{}.methods(false) end assert('Kernel#private_methods', '15.3.1.3.36') do diff --git a/mrbgems/mruby-method/README.md b/mrbgems/mruby-method/README.md index 5cb0b342a..eef414c55 100644 --- a/mrbgems/mruby-method/README.md +++ b/mrbgems/mruby-method/README.md @@ -1,7 +1,7 @@ mruby-method === -A implementation of class **Method** and **UnboundMethod** for mruby +An implementation of class **Method** and **UnboundMethod** for mruby ```ruby p Enumerable.instance_method(:find_all).source_location diff --git a/mrbgems/mruby-method/src/method.c b/mrbgems/mruby-method/src/method.c index 5d3a6c46a..8c8ebcd4f 100644 --- a/mrbgems/mruby-method/src/method.c +++ b/mrbgems/mruby-method/src/method.c @@ -175,7 +175,7 @@ method_unbind(mrb_state *mrb, mrb_value self) mrb_value proc = mrb_iv_get(mrb, self, MRB_SYM(_proc)); mrb_value klass = mrb_iv_get(mrb, self, MRB_SYM(_klass)); - ume = method_object_alloc(mrb, mrb_class_get(mrb, "UnboundMethod")); + ume = method_object_alloc(mrb, mrb_class_get_id(mrb, MRB_SYM(UnboundMethod))); mrb_obj_iv_set(mrb, ume, MRB_SYM(_owner), owner); mrb_obj_iv_set(mrb, ume, MRB_SYM(_recv), mrb_nil_value()); mrb_obj_iv_set(mrb, ume, MRB_SYM(_name), name); @@ -356,7 +356,7 @@ mrb_kernel_method(mrb_state *mrb, mrb_value self) mrb_search_method_owner(mrb, mrb_class(mrb, self), self, name, &owner, &proc, FALSE); - me = method_object_alloc(mrb, mrb_class_get(mrb, "Method")); + me = method_object_alloc(mrb, mrb_class_get_id(mrb, MRB_SYM(Method))); mrb_obj_iv_set(mrb, me, MRB_SYM(_owner), mrb_obj_value(owner)); mrb_obj_iv_set(mrb, me, MRB_SYM(_recv), self); mrb_obj_iv_set(mrb, me, MRB_SYM(_name), mrb_symbol_value(name)); @@ -378,7 +378,7 @@ mrb_module_instance_method(mrb_state *mrb, mrb_value self) mrb_search_method_owner(mrb, mrb_class_ptr(self), self, name, &owner, &proc, TRUE); - ume = method_object_alloc(mrb, mrb_class_get(mrb, "UnboundMethod")); + ume = method_object_alloc(mrb, mrb_class_get_id(mrb, MRB_SYM(UnboundMethod))); mrb_obj_iv_set(mrb, ume, MRB_SYM(_owner), mrb_obj_value(owner)); mrb_obj_iv_set(mrb, ume, MRB_SYM(_recv), mrb_nil_value()); mrb_obj_iv_set(mrb, ume, MRB_SYM(_name), mrb_symbol_value(name)); @@ -409,8 +409,8 @@ method_name(mrb_state *mrb, mrb_value self) void mrb_mruby_method_gem_init(mrb_state* mrb) { - struct RClass *unbound_method = mrb_define_class(mrb, "UnboundMethod", mrb->object_class); - struct RClass *method = mrb_define_class(mrb, "Method", mrb->object_class); + struct RClass *unbound_method = mrb_define_class_id(mrb, MRB_SYM(UnboundMethod), mrb->object_class); + struct RClass *method = mrb_define_class_id(mrb, MRB_SYM(Method), mrb->object_class); mrb_undef_class_method(mrb, unbound_method, "new"); mrb_define_method(mrb, unbound_method, "bind", unbound_method_bind, MRB_ARGS_REQ(1)); diff --git a/mrbgems/mruby-pack/src/pack.c b/mrbgems/mruby-pack/src/pack.c index b0da7b06b..e52171d6b 100644 --- a/mrbgems/mruby-pack/src/pack.c +++ b/mrbgems/mruby-pack/src/pack.c @@ -1186,10 +1186,14 @@ mrb_pack_pack(mrb_state *mrb, mrb_value ary) if (dir == PACK_DIR_INVALID) continue; else if (dir == PACK_DIR_NUL) { - ridx += pack_x(mrb, mrb_nil_value(), result, ridx, count, flags); - continue; + ridx += pack_x(mrb, mrb_nil_value(), result, ridx, count, flags); + if (ridx < 0) goto overflow; + continue; } + if ((flags & PACK_FLAG_WIDTH) && aidx >= RARRAY_LEN(ary)) { + mrb_raise(mrb, E_ARGUMENT_ERROR, "too few arguments"); + } for (; aidx < RARRAY_LEN(ary); aidx++) { if (count == 0 && !(flags & PACK_FLAG_WIDTH)) break; @@ -1258,6 +1262,7 @@ mrb_pack_pack(mrb_state *mrb, mrb_value ary) } } if (ridx < 0) { + overflow: mrb_raise(mrb, E_RANGE_ERROR, "negative (or overflowed) template size"); } } diff --git a/mrbgems/mruby-proc-binding/mrbgem.rake b/mrbgems/mruby-proc-binding/mrbgem.rake new file mode 100644 index 000000000..425aac847 --- /dev/null +++ b/mrbgems/mruby-proc-binding/mrbgem.rake @@ -0,0 +1,9 @@ +MRuby::Gem::Specification.new('mruby-proc-binding') do |spec| + spec.license = 'MIT' + spec.author = 'mruby developers' + spec.summary = 'Proc#binding method' + + spec.add_dependency('mruby-binding-core', :core => 'mruby-binding-core') + spec.add_test_dependency('mruby-binding', :core => 'mruby-binding') + spec.add_test_dependency('mruby-compiler', :core => 'mruby-compiler') +end diff --git a/mrbgems/mruby-proc-binding/src/proc-binding.c b/mrbgems/mruby-proc-binding/src/proc-binding.c new file mode 100644 index 000000000..82d9d1d51 --- /dev/null +++ b/mrbgems/mruby-proc-binding/src/proc-binding.c @@ -0,0 +1,52 @@ +#include <mruby.h> +#include <mruby/presym.h> +#include <mruby/proc.h> +#include <mruby/variable.h> + +void mrb_proc_merge_lvar(mrb_state *mrb, mrb_irep *irep, struct REnv *env, int num, const mrb_sym *lv, const mrb_value *stack); + +/* provided by mruby-proc-ext */ +mrb_value mrb_proc_source_location(mrb_state *mrb, struct RProc *p); + +/* provided by mruby-binding-core */ +mrb_value mrb_binding_alloc(mrb_state *mrb); +struct RProc *mrb_binding_wrap_lvspace(mrb_state *mrb, const struct RProc *proc, struct REnv **envp); + +static mrb_value +mrb_proc_binding(mrb_state *mrb, mrb_value procval) +{ + mrb_value binding = mrb_binding_alloc(mrb); + const struct RProc *proc = mrb_proc_ptr(procval); + struct REnv *env; + + mrb_value receiver; + if (!proc || MRB_PROC_CFUNC_P(proc) || !proc->upper || MRB_PROC_CFUNC_P(proc->upper)) { + env = NULL; + proc = NULL; + receiver = mrb_nil_value(); + } + else { + env = MRB_PROC_ENV(proc); + mrb_assert(env); + proc = proc->upper; + receiver = MRB_ENV_LEN(env) > 0 ? env->stack[0] : mrb_nil_value(); + } + + proc = mrb_binding_wrap_lvspace(mrb, proc, &env); + mrb_iv_set(mrb, binding, MRB_SYM(proc), mrb_obj_value((void *)proc)); + mrb_iv_set(mrb, binding, MRB_SYM(recv), receiver); + mrb_iv_set(mrb, binding, MRB_SYM(env), mrb_obj_value(env)); + mrb_iv_set(mrb, binding, MRB_SYM(source_location), mrb_proc_source_location(mrb, mrb_proc_ptr(procval))); + return binding; +} + +void +mrb_mruby_proc_binding_gem_init(mrb_state *mrb) +{ + mrb_define_method(mrb, mrb->proc_class, "binding", mrb_proc_binding, MRB_ARGS_NONE()); +} + +void +mrb_mruby_proc_binding_gem_final(mrb_state *mrb) +{ +} diff --git a/mrbgems/mruby-proc-binding/test/proc-binding.c b/mrbgems/mruby-proc-binding/test/proc-binding.c new file mode 100644 index 000000000..ec071b920 --- /dev/null +++ b/mrbgems/mruby-proc-binding/test/proc-binding.c @@ -0,0 +1,14 @@ +#include <mruby.h> +#include <mruby/compile.h> + +static mrb_value +proc_in_c(mrb_state *mrb, mrb_value self) +{ + return mrb_load_string(mrb, "proc { |a, b| a + b }"); +} + +void +mrb_mruby_proc_binding_gem_test(mrb_state *mrb) +{ + mrb_define_method(mrb, mrb->object_class, "proc_in_c", proc_in_c, MRB_ARGS_NONE()); +} diff --git a/mrbgems/mruby-proc-binding/test/proc-binding.rb b/mrbgems/mruby-proc-binding/test/proc-binding.rb new file mode 100644 index 000000000..b28d8b1dd --- /dev/null +++ b/mrbgems/mruby-proc-binding/test/proc-binding.rb @@ -0,0 +1,22 @@ +assert "Proc#binding" do + block = ->(i) {} + a, b, c = 1, 2, 3 + bind = block.binding + assert_equal([:a, :b, :bind, :block, :c], bind.local_variables.sort) + assert_equal(1, bind.local_variable_get(:a)) + assert_equal(5, bind.eval("b + c")) + bind.local_variable_set(:x, 9) + assert_equal(9, bind.local_variable_get(:x)) +end + +assert("Binding#source_location after Proc#binding") do + skip unless -> {}.source_location + + block, source_location = -> {}, [__FILE__, __LINE__] + assert_equal source_location, block.binding.source_location +end + +assert "Proc#binding and .eval from C" do + bind = proc_in_c.binding + assert_nothing_raised { bind.eval("self") } +end diff --git a/mrbgems/mruby-proc-ext/src/proc.c b/mrbgems/mruby-proc-ext/src/proc.c index 6117c4d40..9d8a7b037 100644 --- a/mrbgems/mruby-proc-ext/src/proc.c +++ b/mrbgems/mruby-proc-ext/src/proc.c @@ -13,11 +13,9 @@ mrb_proc_lambda_p(mrb_state *mrb, mrb_value self) return mrb_bool_value(MRB_PROC_STRICT_P(p)); } -static mrb_value -mrb_proc_source_location(mrb_state *mrb, mrb_value self) +mrb_value +mrb_proc_source_location(mrb_state *mrb, struct RProc *p) { - struct RProc *p = mrb_proc_ptr(self); - if (MRB_PROC_CFUNC_P(p)) { return mrb_nil_value(); } @@ -35,6 +33,12 @@ mrb_proc_source_location(mrb_state *mrb, mrb_value self) } static mrb_value +mrb_proc_source_location_m(mrb_state *mrb, mrb_value self) +{ + return mrb_proc_source_location(mrb, mrb_proc_ptr(self)); +} + +static mrb_value mrb_proc_inspect(mrb_state *mrb, mrb_value self) { struct RProc *p = mrb_proc_ptr(self); @@ -183,7 +187,7 @@ mrb_mruby_proc_ext_gem_init(mrb_state* mrb) { struct RClass *p = mrb->proc_class; mrb_define_method(mrb, p, "lambda?", mrb_proc_lambda_p, MRB_ARGS_NONE()); - mrb_define_method(mrb, p, "source_location", mrb_proc_source_location, MRB_ARGS_NONE()); + mrb_define_method(mrb, p, "source_location", mrb_proc_source_location_m, MRB_ARGS_NONE()); mrb_define_method(mrb, p, "to_s", mrb_proc_inspect, MRB_ARGS_NONE()); mrb_define_method(mrb, p, "inspect", mrb_proc_inspect, MRB_ARGS_NONE()); mrb_define_method(mrb, p, "parameters", mrb_proc_parameters, MRB_ARGS_NONE()); diff --git a/mrbgems/mruby-random/src/random.c b/mrbgems/mruby-random/src/random.c index 0cefb9ed0..1fc42b854 100644 --- a/mrbgems/mruby-random/src/random.c +++ b/mrbgems/mruby-random/src/random.c @@ -168,7 +168,7 @@ random_check(mrb_state *mrb, mrb_value random) { static mrb_value random_default(mrb_state *mrb) { - struct RClass *c = mrb_class_get(mrb, "Random"); + struct RClass *c = mrb_class_get_id(mrb, MRB_SYM(Random)); mrb_value d = mrb_const_get(mrb, mrb_obj_value(c), MRB_SYM(DEFAULT)); if (!mrb_obj_is_kind_of(mrb, d, c)) { mrb_raise(mrb, E_TYPE_ERROR, "Random::DEFAULT replaced"); diff --git a/mrbgems/mruby-rational/src/rational.c b/mrbgems/mruby-rational/src/rational.c index 9081c2eec..618ffa805 100644 --- a/mrbgems/mruby-rational/src/rational.c +++ b/mrbgems/mruby-rational/src/rational.c @@ -156,10 +156,10 @@ rational_new_i(mrb_state *mrb, mrb_int n, mrb_int d) if (d == 0) { rat_zerodiv(mrb); } - a = i_gcd(n, d); - if ((n == MRB_INT_MIN || d == MRB_INT_MIN) && a == -1) { + if (n == MRB_INT_MIN || d == MRB_INT_MIN) { rat_overflow(mrb); } + a = i_gcd(n, d); return rational_new(mrb, n/a, d/a); } diff --git a/mrbgems/mruby-sleep/README.md b/mrbgems/mruby-sleep/README.md index 0ccc7000f..cddae7c13 100644 --- a/mrbgems/mruby-sleep/README.md +++ b/mrbgems/mruby-sleep/README.md @@ -4,7 +4,7 @@ mruby sleep module ## install by mrbgems -- add conf.gem line to your build configuration. +- add `conf.gem` line to your build configuration. ```ruby MRuby::Build.new do |conf| diff --git a/mrbgems/mruby-sleep/example/sleep.rb b/mrbgems/mruby-sleep/example/sleep.rb index e5acea3b2..90a436937 100644 --- a/mrbgems/mruby-sleep/example/sleep.rb +++ b/mrbgems/mruby-sleep/example/sleep.rb @@ -1,3 +1,2 @@ sleep(10) usleep(10000) - diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.c b/mrbgems/mruby-sleep/src/sleep.c index 79a5af650..79a5af650 100644 --- a/mrbgems/mruby-sleep/src/mrb_sleep.c +++ b/mrbgems/mruby-sleep/src/sleep.c diff --git a/mrbgems/mruby-sprintf/test/sprintf.rb b/mrbgems/mruby-sprintf/test/sprintf.rb index 8f99f9cd0..0a8166bae 100644 --- a/mrbgems/mruby-sprintf/test/sprintf.rb +++ b/mrbgems/mruby-sprintf/test/sprintf.rb @@ -10,11 +10,11 @@ assert('String#%') do assert_equal 15, ("%b" % (1<<14)).size skip unless Object.const_defined?(:Float) assert_equal "1.0", "%3.1f" % 1.01 - assert_equal " 123456789.12", "% 4.2f" % 123456789.123456789 - assert_equal "123456789.12", "%-4.2f" % 123456789.123456789 - assert_equal "+123456789.12", "%+4.2f" % 123456789.123456789 - assert_equal "123456789.12", "%04.2f" % 123456789.123456789 - assert_equal "00000000123456789.12", "%020.2f" % 123456789.123456789 + assert_equal " 1234567.12", "% 4.2f" % 1234567.123456789 + assert_equal "1234567.12", "%-4.2f" % 1234567.123456789 + assert_equal "+1234567.12", "%+4.2f" % 1234567.123456789 + assert_equal "1234567.12", "%04.2f" % 1234567.123456789 + assert_equal "00000000001234567.12", "%020.2f" % 1234567.123456789 end assert('String#% with inf') do diff --git a/mrbgems/mruby-struct/mrblib/struct.rb b/mrbgems/mruby-struct/mrblib/struct.rb index b398409c3..2439e2a37 100644 --- a/mrbgems/mruby-struct/mrblib/struct.rb +++ b/mrbgems/mruby-struct/mrblib/struct.rb @@ -2,99 +2,96 @@ # Struct # # ISO 15.2.18 +class Struct -if Object.const_defined?(:Struct) - class Struct + ## + # Calls the given block for each element of +self+ + # and pass the respective element. + # + # ISO 15.2.18.4.4 + def each(&block) + self.class.members.each{|field| + block.call(self[field]) + } + self + end - ## - # Calls the given block for each element of +self+ - # and pass the respective element. - # - # ISO 15.2.18.4.4 - def each(&block) - self.class.members.each{|field| - block.call(self[field]) - } - self - end + ## + # Calls the given block for each element of +self+ + # and pass the name and value of the respective + # element. + # + # ISO 15.2.18.4.5 + def each_pair(&block) + self.class.members.each{|field| + block.call(field.to_sym, self[field]) + } + self + end - ## - # Calls the given block for each element of +self+ - # and pass the name and value of the respective - # element. - # - # ISO 15.2.18.4.5 - def each_pair(&block) - self.class.members.each{|field| - block.call(field.to_sym, self[field]) - } - self - end + ## + # Calls the given block for each element of +self+ + # and returns an array with all elements of which + # block is not false. + # + # ISO 15.2.18.4.7 + def select(&block) + ary = [] + self.class.members.each{|field| + val = self[field] + ary.push(val) if block.call(val) + } + ary + end - ## - # Calls the given block for each element of +self+ - # and returns an array with all elements of which - # block is not false. - # - # ISO 15.2.18.4.7 - def select(&block) - ary = [] - self.class.members.each{|field| - val = self[field] - ary.push(val) if block.call(val) - } - ary + def _inspect(recur_list) + return "#<struct #{self.class}:...>" if recur_list[self.object_id] + recur_list[self.object_id] = true + name = self.class.to_s + if name[0] == "#" + str = "#<struct " + else + str = "#<struct #{name} " end - - def _inspect(recur_list) - return "#<struct #{self.class}:...>" if recur_list[self.object_id] - recur_list[self.object_id] = true - name = self.class.to_s - if name[0] == "#" - str = "#<struct " - else - str = "#<struct #{name} " - end - buf = [] - self.each_pair do |k,v| - buf.push k.to_s + "=" + v._inspect(recur_list) - end - str + buf.join(", ") + ">" + buf = [] + self.each_pair do |k,v| + buf.push k.to_s + "=" + v._inspect(recur_list) end + str + buf.join(", ") + ">" + end - ## - # call-seq: - # struct.to_s -> string - # struct.inspect -> string - # - # Describe the contents of this struct in a string. - # - # 15.2.18.4.10(x) - # - def inspect - self._inspect({}) - end + ## + # call-seq: + # struct.to_s -> string + # struct.inspect -> string + # + # Describe the contents of this struct in a string. + # + # 15.2.18.4.10(x) + # + def inspect + self._inspect({}) + end - ## - # 15.2.18.4.11(x) - # - alias to_s inspect + ## + # 15.2.18.4.11(x) + # + alias to_s inspect - ## - # call-seq: - # hsh.dig(key,...) -> object - # - # Extracts the nested value specified by the sequence of <i>key</i> - # objects by calling +dig+ at each step, returning +nil+ if any - # intermediate step is +nil+. - # - def dig(idx,*args) - n = self[idx] - if args.size > 0 - n&.dig(*args) - else - n - end + ## + # call-seq: + # hsh.dig(key,...) -> object + # + # Extracts the nested value specified by the sequence of <i>key</i> + # objects by calling +dig+ at each step, returning +nil+ if any + # intermediate step is +nil+. + # + def dig(idx,*args) + n = self[idx] + if args.size > 0 + n&.dig(*args) + else + n end end end diff --git a/mrbgems/mruby-test/driver.c b/mrbgems/mruby-test/driver.c index d26233683..958e87dd1 100644 --- a/mrbgems/mruby-test/driver.c +++ b/mrbgems/mruby-test/driver.c @@ -226,9 +226,9 @@ mrb_init_test_driver(mrb_state *mrb, mrb_bool verbose) #ifndef MRB_NO_FLOAT #ifdef MRB_USE_FLOAT32 - mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-6)); + mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-5)); #else - mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-12)); + mrb_define_const(mrb, mrbtest, "FLOAT_TOLERANCE", mrb_float_value(mrb, 1e-10)); #endif #endif diff --git a/mrbgems/mruby-test/mrbgem.rake b/mrbgems/mruby-test/mrbgem.rake index 421108e0b..927447b4f 100644 --- a/mrbgems/mruby-test/mrbgem.rake +++ b/mrbgems/mruby-test/mrbgem.rake @@ -20,7 +20,7 @@ MRuby::Gem::Specification.new('mruby-test') do |spec| _pp "GEN", t.name.relative_path mkdir_p File.dirname(t.name) open(t.name, 'w') do |f| - mrbc.run f, assert_rb, 'mrbtest_assert_irep', false + mrbc.run f, assert_rb, 'mrbtest_assert_irep', cdump: false end end @@ -52,10 +52,10 @@ MRuby::Gem::Specification.new('mruby-test') do |spec| if test_preload.nil? f.puts %Q[extern const uint8_t mrbtest_assert_irep[];] else - g.build.mrbc.run f, test_preload, "gem_test_irep_#{g.funcname}_preload", false + g.build.mrbc.run f, test_preload, "gem_test_irep_#{g.funcname}_preload", cdump: false end g.test_rbfiles.flatten.each_with_index do |rbfile, i| - g.build.mrbc.run f, rbfile, "gem_test_irep_#{g.funcname}_#{i}", false + g.build.mrbc.run f, rbfile, "gem_test_irep_#{g.funcname}_#{i}", cdump: false, static: true end f.puts %Q[void mrb_#{g.funcname}_gem_test(mrb_state *mrb);] if g.custom_test_init? dep_list.each do |d| diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c index 702cf2e29..15ec7f362 100644 --- a/mrbgems/mruby-time/src/time.c +++ b/mrbgems/mruby-time/src/time.c @@ -21,6 +21,9 @@ #endif #include <stdlib.h> +#ifndef _WIN32 +#include <unistd.h> +#endif #define NDIV(x,y) (-(-((x)+1)/(y))-1) #define TO_S_FMT "%Y-%m-%d %H:%M:%S " @@ -63,6 +66,10 @@ double round(double x) { #define NO_GMTIME_R #endif #endif +#ifdef __STRICT_ANSI__ +/* Strict ANSI (e.g. -std=c99) do not provide gmtime_r/localtime_r */ +#define NO_GMTIME_R +#endif /* asctime(3) */ /* mruby usually use its own implementation of struct tm to string conversion */ @@ -214,7 +221,7 @@ typedef mrb_int mrb_sec; MRB_TIME_T_UINT ? 0 : \ (sizeof(time_t) <= 4 ? INT32_MIN : INT64_MIN) \ ) -#define MRB_TIME_MAX ( \ +#define MRB_TIME_MAX (time_t)( \ MRB_TIME_T_UINT ? (sizeof(time_t) <= 4 ? UINT32_MAX : UINT64_MAX) : \ (sizeof(time_t) <= 4 ? INT32_MAX : INT64_MAX) \ ) @@ -376,9 +383,14 @@ current_mrb_time(mrb_state *mrb) #if defined(TIME_UTC) && !defined(__ANDROID__) { struct timespec ts; - if (timespec_get(&ts, TIME_UTC) == 0) { - mrb_raise(mrb, E_RUNTIME_ERROR, "timespec_get() failed for unknown reasons"); - } + timespec_get(&ts, TIME_UTC); + sec = ts.tv_sec; + usec = ts.tv_nsec / 1000; + } +#elif (defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0) && defined(CLOCK_MONOTONIC) + { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); sec = ts.tv_sec; usec = ts.tv_nsec / 1000; } @@ -463,7 +475,7 @@ time_mktime(mrb_state *mrb, mrb_int ayear, mrb_int amonth, mrb_int aday, || (nowtime.tm_hour == 24 && (nowtime.tm_min > 0 || nowtime.tm_sec > 0)) || nowtime.tm_min < 0 || nowtime.tm_min > 59 || nowtime.tm_sec < 0 || nowtime.tm_sec > 60) - mrb_raise(mrb, E_RUNTIME_ERROR, "argument out of range"); + mrb_raise(mrb, E_ARGUMENT_ERROR, "argument out of range"); if (timezone == MRB_TIMEZONE_UTC) { nowsecs = timegm(&nowtime); @@ -472,7 +484,7 @@ time_mktime(mrb_state *mrb, mrb_int ayear, mrb_int amonth, mrb_int aday, nowsecs = mktime(&nowtime); } if (nowsecs == (time_t)-1) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "Not a valid time."); + mrb_raise(mrb, E_ARGUMENT_ERROR, "Not a valid time"); } return time_alloc_time(mrb, nowsecs, ausec, timezone); @@ -556,6 +568,12 @@ mrb_time_cmp(mrb_state *mrb, mrb_value self) return mrb_fixnum_value(0); } +static mrb_noreturn void +int_overflow(mrb_state *mrb, const char *reason) +{ + mrb_raisef(mrb, E_RANGE_ERROR, "time_t overflow in Time %s", reason); +} + static mrb_value mrb_time_plus(mrb_state *mrb, mrb_value self) { @@ -565,7 +583,24 @@ mrb_time_plus(mrb_state *mrb, mrb_value self) tm = time_get_ptr(mrb, self); sec = mrb_to_time_t(mrb, o, &usec); - return mrb_time_make_time(mrb, mrb_obj_class(mrb, self), tm->sec+sec, tm->usec+usec, tm->timezone); +#ifdef MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS + if (__builtin_add_overflow(tm->sec, sec, &sec)) { + int_overflow(mrb, "addition"); + } +#else + if (sec >= 0) { + if (tm->sec > MRB_TIME_MAX - sec) { + int_overflow(mrb, "addition"); + } + } + else { + if (tm->sec < MRB_TIME_MIN - sec) { + int_overflow(mrb, "addition"); + } + } + sec = tm->sec + sec; +#endif + return mrb_time_make_time(mrb, mrb_obj_class(mrb, self), sec, tm->usec+usec, tm->timezone); } static mrb_value @@ -592,7 +627,24 @@ mrb_time_minus(mrb_state *mrb, mrb_value self) else { time_t sec, usec; sec = mrb_to_time_t(mrb, other, &usec); - return mrb_time_make_time(mrb, mrb_obj_class(mrb, self), tm->sec-sec, tm->usec-usec, tm->timezone); +#ifdef MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS + if (__builtin_sub_overflow(tm->sec, sec, &sec)) { + int_overflow(mrb, "subtraction"); + } +#else + if (sec >= 0) { + if (tm->sec < MRB_TIME_MIN + sec) { + int_overflow(mrb, "subtraction"); + } + } + else { + if (tm->sec > MRB_TIME_MAX + sec) { + int_overflow(mrb, "subtraction"); + } + } + sec = tm->sec - sec; +#endif + return mrb_time_make_time(mrb, mrb_obj_class(mrb, self), sec, tm->usec-usec, tm->timezone); } } @@ -654,16 +706,15 @@ mrb_time_asctime(mrb_state *mrb, mrb_value self) int len; #if defined(MRB_NO_STDIO) - char *s; # ifdef NO_ASCTIME_R - s = asctime(d); + char *buf = asctime(d); # else - char buf[32]; + char buf[32], *s; s = asctime_r(d, buf); # endif - len = strlen(s)-1; /* truncate the last newline */ + len = strlen(buf)-1; /* truncate the last newline */ #else - char buf[256]; + char buf[32]; len = snprintf(buf, sizeof(buf), "%s %s %2d %02d:%02d:%02d %.4d", wday_names[d->tm_wday], mon_names[d->tm_mon], d->tm_mday, @@ -928,7 +979,7 @@ time_to_s_local(mrb_state *mrb, struct mrb_time *tm, char *buf, size_t buf_len) int offset; if (utc_sec == (time_t)-1) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "Not a valid time."); + mrb_raise(mrb, E_ARGUMENT_ERROR, "Not a valid time"); } offset = abs((int)(utc_sec - tm->sec) / 60); datetime.tm_year = 100; diff --git a/mrbgems/mruby-toplevel-ext/test/toplevel.rb b/mrbgems/mruby-toplevel-ext/test/toplevel.rb index 26aae9a7d..369a14909 100644 --- a/mrbgems/mruby-toplevel-ext/test/toplevel.rb +++ b/mrbgems/mruby-toplevel-ext/test/toplevel.rb @@ -21,4 +21,3 @@ assert('Toplevel#include') do assert_equal :foo, method_foo assert_equal :bar2, CONST_BAR end - diff --git a/mrblib/init_mrblib.c b/mrblib/init_mrblib.c deleted file mode 100644 index e69de29bb..000000000 --- a/mrblib/init_mrblib.c +++ /dev/null diff --git a/src/array.c b/src/array.c index a66ff8183..8ab30bd8e 100644 --- a/src/array.c +++ b/src/array.c @@ -56,18 +56,17 @@ mrb_ary_new(mrb_state *mrb) } /* - * to copy array, use this instead of memcpy because of portability + * To copy array, use this instead of memcpy because of portability * * gcc on ARM may fail optimization of memcpy - * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3934.html + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56620 * * gcc on MIPS also fail - * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39755 + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39755 * * memcpy doesn't exist on freestanding environment * * If you optimize for binary size, use memcpy instead of this at your own risk * of above portability issue. * - * see also http://togetter.com/li/462898 - * + * See also https://togetter.com/li/462898 (Japanese) */ static inline void array_copy(mrb_value *dst, const mrb_value *src, mrb_int size) diff --git a/src/dump.c b/src/dump.c index 5173b88e5..51e8dca4e 100644 --- a/src/dump.c +++ b/src/dump.c @@ -23,45 +23,6 @@ static size_t get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep); # error This code cannot be built on your environment. #endif -#define OPERATOR_SYMBOL(sym_name, name) {name, sym_name, sizeof(sym_name)-1} -struct operator_symbol { - const char *name; - const char *sym_name; - uint16_t sym_name_len; -}; -static const struct operator_symbol operator_table[] = { - OPERATOR_SYMBOL("!", "not"), - OPERATOR_SYMBOL("%", "mod"), - OPERATOR_SYMBOL("&", "and"), - OPERATOR_SYMBOL("*", "mul"), - OPERATOR_SYMBOL("+", "add"), - OPERATOR_SYMBOL("-", "sub"), - OPERATOR_SYMBOL("/", "div"), - OPERATOR_SYMBOL("<", "lt"), - OPERATOR_SYMBOL(">", "gt"), - OPERATOR_SYMBOL("^", "xor"), - OPERATOR_SYMBOL("`", "tick"), - OPERATOR_SYMBOL("|", "or"), - OPERATOR_SYMBOL("~", "neg"), - OPERATOR_SYMBOL("!=", "neq"), - OPERATOR_SYMBOL("!~", "nmatch"), - OPERATOR_SYMBOL("&&", "andand"), - OPERATOR_SYMBOL("**", "pow"), - OPERATOR_SYMBOL("+@", "plus"), - OPERATOR_SYMBOL("-@", "minus"), - OPERATOR_SYMBOL("<<", "lshift"), - OPERATOR_SYMBOL("<=", "le"), - OPERATOR_SYMBOL("==", "eq"), - OPERATOR_SYMBOL("=~", "match"), - OPERATOR_SYMBOL(">=", "ge"), - OPERATOR_SYMBOL(">>", "rshift"), - OPERATOR_SYMBOL("[]", "aref"), - OPERATOR_SYMBOL("||", "oror"), - OPERATOR_SYMBOL("<=>", "cmp"), - OPERATOR_SYMBOL("===", "eqq"), - OPERATOR_SYMBOL("[]=", "aset"), -}; - static size_t get_irep_header_size(mrb_state *mrb) { @@ -806,7 +767,7 @@ dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin, si section_irep_size += get_irep_record_size(mrb, irep); /* DEBUG section size */ - if (flags & DUMP_DEBUG_INFO) { + if (flags & MRB_DUMP_DEBUG_INFO) { if (debug_info_defined) { section_lineno_size += sizeof(struct rite_section_debug_header); /* filename table */ @@ -842,7 +803,7 @@ dump_irep(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, uint8_t **bin, si sizeof(struct rite_binary_footer); /* write DEBUG section */ - if (flags & DUMP_DEBUG_INFO) { + if (flags & MRB_DUMP_DEBUG_INFO) { if (debug_info_defined) { result = write_section_debug(mrb, irep, cur, filenames, filenames_len); if (result != MRB_DUMP_OK) { @@ -920,11 +881,13 @@ mrb_dump_irep_cfunc(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *f return MRB_DUMP_WRITE_FAULT; } if (fprintf(fp, - "#ifdef __cplusplus\n" - "extern const uint8_t %s[];\n" - "#endif\n" + "%s\n" "const uint8_t %s[] = {", - initname, initname) < 0) { + (flags & MRB_DUMP_STATIC) ? "static" + : "#ifdef __cplusplus\n" + "extern\n" + "#endif", + initname) < 0) { mrb_free(mrb, bin); return MRB_DUMP_WRITE_FAULT; } @@ -1033,6 +996,45 @@ sym_name_cvar_p(const char *name, mrb_int len) return len >= 3 && name[0] == '@' && sym_name_ivar_p(name+1, len-1); } +#define OPERATOR_SYMBOL(sym_name, name) {name, sym_name, sizeof(sym_name)-1} +struct operator_symbol { + const char *name; + const char *sym_name; + uint16_t sym_name_len; +}; +static const struct operator_symbol operator_table[] = { + OPERATOR_SYMBOL("!", "not"), + OPERATOR_SYMBOL("%", "mod"), + OPERATOR_SYMBOL("&", "and"), + OPERATOR_SYMBOL("*", "mul"), + OPERATOR_SYMBOL("+", "add"), + OPERATOR_SYMBOL("-", "sub"), + OPERATOR_SYMBOL("/", "div"), + OPERATOR_SYMBOL("<", "lt"), + OPERATOR_SYMBOL(">", "gt"), + OPERATOR_SYMBOL("^", "xor"), + OPERATOR_SYMBOL("`", "tick"), + OPERATOR_SYMBOL("|", "or"), + OPERATOR_SYMBOL("~", "neg"), + OPERATOR_SYMBOL("!=", "neq"), + OPERATOR_SYMBOL("!~", "nmatch"), + OPERATOR_SYMBOL("&&", "andand"), + OPERATOR_SYMBOL("**", "pow"), + OPERATOR_SYMBOL("+@", "plus"), + OPERATOR_SYMBOL("-@", "minus"), + OPERATOR_SYMBOL("<<", "lshift"), + OPERATOR_SYMBOL("<=", "le"), + OPERATOR_SYMBOL("==", "eq"), + OPERATOR_SYMBOL("=~", "match"), + OPERATOR_SYMBOL(">=", "ge"), + OPERATOR_SYMBOL(">>", "rshift"), + OPERATOR_SYMBOL("[]", "aref"), + OPERATOR_SYMBOL("||", "oror"), + OPERATOR_SYMBOL("<=>", "cmp"), + OPERATOR_SYMBOL("===", "eqq"), + OPERATOR_SYMBOL("[]=", "aset"), +}; + static const char* sym_operator_name(const char *sym_name, mrb_int len) { @@ -1232,8 +1234,14 @@ mrb_dump_irep_cstruct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE int max = 1; int n = dump_irep_struct(mrb, irep, flags, fp, initname, 0, init_syms_code, &max); if (n != MRB_DUMP_OK) return n; - fprintf(fp, "#ifdef __cplusplus\nextern const struct RProc %s[];\n#endif\n", initname); - fprintf(fp, "const struct RProc %s[] = {{\n", initname); + fprintf(fp, + "%s\n" + "const struct RProc %s[] = {{\n", + (flags & MRB_DUMP_STATIC) ? "static" + : "#ifdef __cplusplus\n" + "extern\n" + "#endif", + initname); fprintf(fp, "NULL,NULL,MRB_TT_PROC,7,0,{&%s_irep_0},NULL,{NULL},\n}};\n", initname); fputs("static void\n", fp); fprintf(fp, "%s_init_syms(mrb_state *mrb)\n", initname); @@ -559,6 +559,9 @@ mrb_obj_alloc(mrb_state *mrb, enum mrb_vtype ttype, struct RClass *cls) mrb_raisef(mrb, E_TYPE_ERROR, "allocation failure of %C", cls); } } + if (ttype <= MRB_TT_FREE) { + mrb_raisef(mrb, E_TYPE_ERROR, "allocation failure of %C (type %d)", cls, (int)ttype); + } #ifdef MRB_GC_STRESS mrb_full_gc(mrb); diff --git a/src/hash.c b/src/hash.c index 289f02a91..c30a8dec4 100644 --- a/src/hash.c +++ b/src/hash.c @@ -151,20 +151,20 @@ DEFINE_ACCESSOR(ht, ea_n_used, uint32_t, ea_n_used) #else DEFINE_FLAG_ACCESSOR(ar, ea_capa, uint32_t, AR_EA_CAPA) DEFINE_FLAG_ACCESSOR(ar, ea_n_used, uint32_t, AR_EA_N_USED) -DEFINE_ACCESSOR(ht, ea_capa, uint32_t, ht->ea_capa) -DEFINE_ACCESSOR(ht, ea_n_used, uint32_t, ht->ea_n_used) +DEFINE_ACCESSOR(ht, ea_capa, uint32_t, hsh.ht->ea_capa) +DEFINE_ACCESSOR(ht, ea_n_used, uint32_t, hsh.ht->ea_n_used) #endif DEFINE_FLAG_ACCESSOR(ib, bit, uint32_t, IB_BIT) DEFINE_ACCESSOR(ar, size, uint32_t, size) -DEFINE_ACCESSOR(ar, ea, hash_entry*, ea) +DEFINE_ACCESSOR(ar, ea, hash_entry*, hsh.ea) DEFINE_DECREMENTER(ar, size) DEFINE_ACCESSOR(ht, size, uint32_t, size) -DEFINE_ACCESSOR(ht, ea, hash_entry*, ht->ea) -DEFINE_GETTER(ht, ib, uint32_t*, ht->ib) +DEFINE_ACCESSOR(ht, ea, hash_entry*, hsh.ht->ea) +DEFINE_GETTER(ht, ib, uint32_t*, hsh.ht->ib) DEFINE_INCREMENTER(ht, size) DEFINE_DECREMENTER(ht, size) DEFINE_GETTER(h, size, uint32_t, size) -DEFINE_ACCESSOR(h, ht, hash_table*, ht) +DEFINE_ACCESSOR(h, ht, hash_table*, hsh.ht) DEFINE_SWITCHER(ht, HT) #define ea_each_used(ea, n_used, entry_var, code) do { \ @@ -215,40 +215,70 @@ DEFINE_SWITCHER(ht, HT) } while (0) /* - * `h_check_modified` raises an exception when a dangerous modification is - * made to `h` by executing `code`. - * - * This macro is not called if `h->ht` (`h->ea`) is `NULL` (`Hash` size is - * zero). And because the `hash_entry` is rather large, `h->ht->ea` and - * `h->ht->ea_capa` are able to be safely accessed even in AR. This nature - * is used to eliminate branch of AR or HT. - * - * `HT_ASSERT_SAFE_READ` checks if members can be accessed according to its - * assumptions. + * In `h_check_modified()`, in the case of `MRB_NO_BOXING`, `ht_ea()` or + * `ht_ea_capa()` for AR may read uninitialized area (#5332). Therefore, do + * not use those macros for AR in `MRB_NO_BOXING` (but in the case of + * `MRB_64BIT`, `ht_ea_capa()` is the same as `ar_ea_capa()`, so use it). */ -#define HT_ASSERT_SAFE_READ(attr_name) \ +#ifdef MRB_NO_BOXING +# define H_CHECK_MODIFIED_USE_HT_EA_FOR_AR FALSE +# ifdef MRB_64BIT +# define H_CHECK_MODIFIED_USE_HT_EA_CAPA_FOR_AR TRUE +# else +# define H_CHECK_MODIFIED_USE_HT_EA_CAPA_FOR_AR FALSE +# endif /* MRB_64BIT */ +#else +# define H_CHECK_MODIFIED_USE_HT_EA_FOR_AR TRUE +# define H_CHECK_MODIFIED_USE_HT_EA_CAPA_FOR_AR TRUE + /* + * `h_check_modified` raises an exception when a dangerous modification is + * made to `h` by executing `code`. + * + * `h_check_modified` macro is not called if `h->hsh.ht` (`h->hsh.ea`) is `NULL` + * (`Hash` size is zero). And because the `hash_entry` is rather large, + * `h->hsh.ht->ea` and `h->hsh.ht->ea_capa` are able to be safely accessed even for + * AR. This nature is used to eliminate branch of AR or HT. + * + * `HT_ASSERT_SAFE_READ` checks if members can be accessed according to its + * assumptions. + */ +# define HT_ASSERT_SAFE_READ(attr_name) \ mrb_static_assert1( \ offsetof(hash_table, attr_name) + sizeof(((hash_table*)0)->attr_name) <= \ sizeof(hash_entry)) HT_ASSERT_SAFE_READ(ea); -#ifdef MRB_32BIT +# ifdef MRB_32BIT HT_ASSERT_SAFE_READ(ea_capa); -#endif -#undef HT_ASSERT_SAFE_READ -#define h_check_modified(mrb, h, code) do { \ - struct RHash *h__ = h; \ - uint32_t mask = MRB_HASH_HT|MRB_HASH_IB_BIT_MASK|MRB_HASH_AR_EA_CAPA_MASK; \ - uint32_t flags = h__->flags & mask; \ - void* tbl__ = (mrb_assert(h__->ht), h__->ht); \ - uint32_t ht_ea_capa__ = ht_ea_capa(h__); \ - hash_entry *ht_ea__ = ht_ea(h__); \ - code; \ - if (flags != (h__->flags & mask) || \ - tbl__ != h__->ht || \ - ht_ea_capa__ != ht_ea_capa(h__) || \ - ht_ea__ != ht_ea(h__)) { \ - mrb_raise(mrb, E_RUNTIME_ERROR, "hash modified"); \ - } \ +# endif +# undef HT_ASSERT_SAFE_READ +#endif /* MRB_NO_BOXING */ + +/* + * `h_check_modified` raises an exception when a dangerous modification is + * made to `h` by executing `code`. + */ +#define h_check_modified(mrb, h, code) do { \ + struct RHash *h__ = h; \ + uint32_t mask__ = MRB_HASH_HT|MRB_HASH_IB_BIT_MASK|MRB_HASH_AR_EA_CAPA_MASK; \ + uint32_t flags__ = h__->flags & mask__; \ + void* tbl__ = (mrb_assert(h__->hsh.ht), h__->hsh.ht); \ + uint32_t ht_ea_capa__ = 0; \ + hash_entry *ht_ea__ = NULL; \ + if (H_CHECK_MODIFIED_USE_HT_EA_CAPA_FOR_AR || h_ht_p(h__)) { \ + ht_ea_capa__ = ht_ea_capa(h__); \ + } \ + if (H_CHECK_MODIFIED_USE_HT_EA_FOR_AR || h_ht_p(h__)) { \ + ht_ea__ = ht_ea(h__); \ + } \ + code; \ + if (flags__ != (h__->flags & mask__) || \ + tbl__ != h__->hsh.ht || \ + ((H_CHECK_MODIFIED_USE_HT_EA_CAPA_FOR_AR || h_ht_p(h__)) && \ + ht_ea_capa__ != ht_ea_capa(h__)) || \ + ((H_CHECK_MODIFIED_USE_HT_EA_FOR_AR || h_ht_p(h__)) && \ + ht_ea__ != ht_ea(h__))) { \ + mrb_raise(mrb, E_RUNTIME_ERROR, "hash modified"); \ + } \ } while (0) #define U32(v) ((uint32_t)(v)) @@ -718,6 +748,7 @@ ib_bit_for(uint32_t size) static uint32_t ib_byte_size_for(uint32_t ib_bit) { + mrb_assert(IB_INIT_BIT <= ib_bit); uint32_t ary_size = IB_INIT_BIT == 4 ? ib_bit_to_capa(ib_bit) * 2 / IB_TYPE_BIT * ib_bit / 2 : ib_bit_to_capa(ib_bit) / IB_TYPE_BIT * ib_bit; @@ -892,7 +923,13 @@ static void ht_rehash(mrb_state *mrb, struct RHash *h) { /* see comments in `h_rehash` */ - uint32_t size = ht_size(h), w_size = 0, ea_capa = ht_ea_capa(h); + uint32_t size = ht_size(h); + if (size <= AR_MAX_SIZE) { + ht_to_ar(mrb, h); + ar_rehash(mrb, h); + return; + } + uint32_t w_size = 0, ea_capa = ht_ea_capa(h); hash_entry *ea = ht_ea(h); ht_init(mrb, h, 0, ea, ea_capa, h_ht(h), ib_bit_for(size)); ht_set_size(h, size); diff --git a/src/load.c b/src/load.c index 93c16a5e1..68be23546 100644 --- a/src/load.c +++ b/src/load.c @@ -153,6 +153,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag i64 <<= 32; i64 |= bin_to_uint32(src); src += sizeof(uint32_t); + pool[i].tt = tt; pool[i].u.i64 = (int64_t)i64; } break; @@ -163,7 +164,7 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag case IREP_TT_FLOAT: #ifndef MRB_NO_FLOAT pool[i].tt = tt; - pool[i].u.f = str_to_double(mrb, (const char*)src); + pool[i].u.f = str_to_double(mrb, (const char*)src); src += sizeof(double); break; #else diff --git a/src/object.c b/src/object.c index d6474ae97..0c6b86630 100644 --- a/src/object.c +++ b/src/object.c @@ -288,7 +288,7 @@ mrb_init_object(mrb_state *mrb) struct RClass *f; mrb->nil_class = n = mrb_define_class(mrb, "NilClass", mrb->object_class); - MRB_SET_INSTANCE_TT(n, MRB_TT_TRUE); + MRB_SET_INSTANCE_TT(n, MRB_TT_FALSE); mrb_undef_class_method(mrb, n, "new"); mrb_define_method(mrb, n, "&", false_and, MRB_ARGS_REQ(1)); /* 15.2.4.3.1 */ mrb_define_method(mrb, n, "^", false_xor, MRB_ARGS_REQ(1)); /* 15.2.4.3.2 */ @@ -307,7 +307,7 @@ mrb_init_object(mrb_state *mrb) mrb_define_method(mrb, t, "inspect", true_to_s, MRB_ARGS_NONE()); mrb->false_class = f = mrb_define_class(mrb, "FalseClass", mrb->object_class); - MRB_SET_INSTANCE_TT(f, MRB_TT_TRUE); + MRB_SET_INSTANCE_TT(f, MRB_TT_FALSE); mrb_undef_class_method(mrb, f, "new"); mrb_define_method(mrb, f, "&", false_and, MRB_ARGS_REQ(1)); /* 15.2.6.3.1 */ mrb_define_method(mrb, f, "^", false_xor, MRB_ARGS_REQ(1)); /* 15.2.6.3.2 */ diff --git a/src/print.c b/src/print.c index 607eb9d1f..4af871b43 100644 --- a/src/print.c +++ b/src/print.c @@ -28,10 +28,6 @@ printstr(mrb_value obj, FILE *stream) printcstr(RSTRING_PTR(obj), RSTRING_LEN(obj), stream); } } -#else -# define printcstr(str, len, stream) (void)0 -# define printstr(obj, stream) (void)0 -#endif void mrb_core_init_printabort(void) @@ -52,6 +48,7 @@ mrb_p(mrb_state *mrb, mrb_value obj) } } + MRB_API void mrb_print_error(mrb_state *mrb) { @@ -69,3 +66,30 @@ mrb_show_copyright(mrb_state *mrb) { printstr(mrb_const_get(mrb, mrb_obj_value(mrb->object_class), MRB_SYM(MRUBY_COPYRIGHT)), stdout); } + +#else +void +mrb_core_init_printabort(void) +{ +} + +MRB_API void +mrb_p(mrb_state *mrb, mrb_value obj) +{ +} + +MRB_API void +mrb_print_error(mrb_state *mrb) +{ +} + +MRB_API void +mrb_show_version(mrb_state *mrb) +{ +} + +MRB_API void +mrb_show_copyright(mrb_state *mrb) +{ +} +#endif diff --git a/src/proc.c b/src/proc.c index 870d5ea16..4a202525c 100644 --- a/src/proc.c +++ b/src/proc.c @@ -10,6 +10,8 @@ #include <mruby/opcode.h> #include <mruby/data.h> #include <mruby/presym.h> +#include <mruby/array.h> +#include <mruby/hash.h> static const mrb_code call_iseq[] = { OP_CALL, @@ -169,11 +171,11 @@ mrb_proc_cfunc_env_get(mrb_state *mrb, mrb_int idx) struct REnv *e; if (!p || !MRB_PROC_CFUNC_P(p)) { - mrb_raise(mrb, E_TYPE_ERROR, "Can't get cfunc env from non-cfunc proc."); + mrb_raise(mrb, E_TYPE_ERROR, "Can't get cfunc env from non-cfunc proc"); } e = MRB_PROC_ENV(p); if (!e) { - mrb_raise(mrb, E_TYPE_ERROR, "Can't get cfunc env from cfunc Proc without REnv."); + mrb_raise(mrb, E_TYPE_ERROR, "Can't get cfunc env from cfunc Proc without REnv"); } if (idx < 0 || MRB_ENV_LEN(e) <= idx) { mrb_raisef(mrb, E_INDEX_ERROR, "Env index out of range: %i (expected: 0 <= index < %i)", @@ -305,6 +307,109 @@ mrb_proc_arity(const struct RProc *p) return arity; } +mrb_value +mrb_proc_local_variables(mrb_state *mrb, const struct RProc *proc) +{ + const mrb_irep *irep; + mrb_value vars; + size_t i; + + if (proc == NULL || MRB_PROC_CFUNC_P(proc)) { + return mrb_ary_new(mrb); + } + vars = mrb_hash_new(mrb); + while (proc) { + if (MRB_PROC_CFUNC_P(proc)) break; + irep = proc->body.irep; + if (irep->lv) { + for (i = 0; i + 1 < irep->nlocals; ++i) { + if (irep->lv[i]) { + mrb_sym sym = irep->lv[i]; + const char *name = mrb_sym_name(mrb, sym); + switch (name[0]) { + case '*': case '&': + break; + default: + mrb_hash_set(mrb, vars, mrb_symbol_value(sym), mrb_true_value()); + break; + } + } + } + } + if (MRB_PROC_SCOPE_P(proc)) break; + proc = proc->upper; + } + + return mrb_hash_keys(mrb, vars); +} + +const struct RProc * +mrb_proc_get_caller(mrb_state *mrb, struct REnv **envp) +{ + struct mrb_context *c = mrb->c; + mrb_callinfo *ci = (c->ci > c->cibase) ? c->ci - 1 : c->cibase; + const struct RProc *proc = ci->proc; + + if (!proc || MRB_PROC_CFUNC_P(proc)) { + if (envp) *envp = NULL; + } + else { + struct RClass *tc = MRB_PROC_TARGET_CLASS(proc); + struct REnv *e = mrb_vm_ci_env(ci); + + if (e == NULL) { + int nstacks = proc->body.irep->nlocals; + e = mrb_env_new(mrb, c, ci, nstacks, ci->stack, tc); + ci->u.env = e; + } + else if (tc) { + e->c = tc; + mrb_field_write_barrier(mrb, (struct RBasic*)e, (struct RBasic*)tc); + } + if (envp) *envp = e; + } + + return proc; +} + +#define IREP_LVAR_MERGE_DEFAULT 50 +#define IREP_LVAR_MERGE_MINIMUM 8 +#define IREP_LVAR_MERGE_MAXIMUM 240 + +#ifdef MRB_IREP_LVAR_MERGE_LIMIT +# define IREP_LVAR_MERGE_LIMIT \ + ((MRB_IREP_LVAR_MERGE_LIMIT) < IREP_LVAR_MERGE_MINIMUM ? IREP_LVAR_MERGE_MINIMUM : \ + (MRB_IREP_LVAR_MERGE_LIMIT) > IREP_LVAR_MERGE_MAXIMUM ? IREP_LVAR_MERGE_MAXIMUM : \ + (MRB_IREP_LVAR_MERGE_LIMIT)) +#else +# define IREP_LVAR_MERGE_LIMIT IREP_LVAR_MERGE_DEFAULT +#endif + +void +mrb_proc_merge_lvar(mrb_state *mrb, mrb_irep *irep, struct REnv *env, int num, const mrb_sym *lv, const mrb_value *stack) +{ + mrb_assert(!(irep->flags & MRB_IREP_NO_FREE)); + + if ((irep->nlocals + num) > IREP_LVAR_MERGE_LIMIT) { + mrb_raise(mrb, E_RUNTIME_ERROR, "too many local variables for binding (mruby limitation)"); + } + + if (!lv) { + mrb_raise(mrb, E_RUNTIME_ERROR, "unavailable local variable names"); + } + + irep->lv = (mrb_sym*)mrb_realloc(mrb, (mrb_sym*)irep->lv, sizeof(mrb_sym) * (irep->nlocals + num)); + env->stack = (mrb_value*)mrb_realloc(mrb, env->stack, sizeof(mrb_value) * (irep->nlocals + 1 /* self */ + num)); + + mrb_sym *destlv = (mrb_sym*)irep->lv + irep->nlocals - 1 /* self */; + mrb_value *destst = env->stack + irep->nlocals; + memmove(destlv, lv, sizeof(mrb_sym) * num); + memmove(destst, stack, sizeof(mrb_value) * num); + irep->nlocals += num; + irep->nregs = irep->nlocals; + MRB_ENV_SET_LEN(env, irep->nlocals); +} + void mrb_init_proc(mrb_state *mrb) { diff --git a/src/state.c b/src/state.c index 83cbf1629..0ba6db6ce 100644 --- a/src/state.c +++ b/src/state.c @@ -110,6 +110,12 @@ void mrb_irep_incref(mrb_state *mrb, mrb_irep *irep) { if (irep->flags & MRB_IREP_NO_FREE) return; + if (irep->refcnt == UINT16_MAX) { + mrb_garbage_collect(mrb); + if (irep->refcnt == UINT16_MAX) { + mrb_raise(mrb, E_RUNTIME_ERROR, "too many irep references"); + } + } irep->refcnt++; } @@ -483,13 +483,73 @@ mrb_funcall_argv(mrb_state *mrb, mrb_value self, mrb_sym mid, mrb_int argc, cons return mrb_funcall_with_block(mrb, self, mid, argc, argv, mrb_nil_value()); } +#define DECOMPOSE32(n) (((n) >> 24) & 0xff), (((n) >> 16) & 0xff), (((n) >> 8) & 0xff), (((n) >> 0) & 0xff) +#define CATCH_HANDLER_MAKE_BYTECODE(t, b, e, j) t, DECOMPOSE32(b), DECOMPOSE32(e), DECOMPOSE32(j) +#define CATCH_HANDLER_NUM_TO_BYTE(n) ((n) * sizeof(struct mrb_irep_catch_handler)) + +static void +mrb_exec_irep_prepare_posthook(mrb_state *mrb, mrb_callinfo *ci, int nregs, mrb_func_t posthook) +{ + /* + * stack: [proc, errinfo, return value by called proc] + * + * begin + * OP_NOP # A dummy instruction built in to make the catch handler react. + * ensure + * OP_EXCEPT R1 # Save the exception object. + * OP_CALL # Call a C function for the hook. + * # The stack is kept as it is in the called proc. + * # The exception will be rethrown within the hook function. + * end + */ + static const mrb_code hook_iseq[] = { + OP_NOP, + OP_EXCEPT, 1, + OP_CALL, + CATCH_HANDLER_MAKE_BYTECODE(MRB_CATCH_ENSURE, 0, 1, 1), + }; + static const mrb_irep hook_irep = { + 1, 3, 1, MRB_IREP_STATIC, hook_iseq, + NULL, NULL, NULL, NULL, NULL, + sizeof(hook_iseq) / sizeof(hook_iseq[0]) - CATCH_HANDLER_NUM_TO_BYTE(1), + 0, 0, 0, 0 + }; + static const struct RProc hook_caller = { + NULL, NULL, MRB_TT_PROC, 7 /* GC_RED */, MRB_FL_OBJ_IS_FROZEN, { &hook_irep }, NULL, { NULL } + }; + + struct RProc *hook = mrb_proc_new_cfunc(mrb, posthook); + int acc = 2; + memmove(ci->stack + acc, ci->stack, sizeof(mrb_value) * nregs); + ci->stack[0] = mrb_obj_value(hook); + ci->stack[1] = mrb_nil_value(); + mrb_callinfo hook_ci = { 0, 0, ci->acc, &hook_caller, ci->stack, &hook_iseq[1], { NULL } }; + ci = cipush(mrb, acc, acc, NULL, ci[0].proc, ci[0].mid, ci[0].argc); + ci->u.env = ci[-1].u.env; + ci[-1] = hook_ci; +} + +/* + * If `posthook` is given, `posthook` will be called even if an + * exception or global jump occurs in `p`. Exception or global jump objects + * are stored in `mrb->c->stack[1]` and should be rethrown in `posthook`. + * + * if (!mrb_nil_p(mrb->c->stack[1])) { + * mrb_exc_raise(mrb, mrb->c->stack[1]); + * } + * + * If you want to return the return value by `proc` as it is, please do + * `return mrb->c->stack[2]`. + * + * However, if `proc` is a C function, it will be ignored. + */ mrb_value -mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p) +mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p, mrb_func_t posthook) { mrb_callinfo *ci = mrb->c->ci; mrb_int keep, nregs; - mrb->c->ci->stack[0] = self; + ci->stack[0] = self; mrb_vm_ci_proc_set(ci, p); if (MRB_PROC_CFUNC_P(p)) { return MRB_PROC_CFUNC(p)(mrb, self); @@ -497,12 +557,17 @@ mrb_exec_irep(mrb_state *mrb, mrb_value self, struct RProc *p) nregs = p->body.irep->nregs; if (ci->argc < 0) keep = 3; else keep = ci->argc + 2; + int extra = posthook ? (2 /* hook proc + errinfo */) : 0; if (nregs < keep) { - mrb_stack_extend(mrb, keep); + mrb_stack_extend(mrb, keep + extra); } else { - mrb_stack_extend(mrb, nregs); - stack_clear(mrb->c->ci->stack+keep, nregs-keep); + mrb_stack_extend(mrb, nregs + extra); + stack_clear(ci->stack+keep, nregs-keep + extra); + } + + if (posthook) { + mrb_exec_irep_prepare_posthook(mrb, ci, (nregs < keep ? keep : nregs), posthook); } cipush(mrb, 0, 0, NULL, NULL, 0, 0); @@ -573,7 +638,7 @@ mrb_f_send(mrb_state *mrb, mrb_value self) } return MRB_METHOD_CFUNC(m)(mrb, self); } - return mrb_exec_irep(mrb, self, MRB_METHOD_PROC(m)); + return mrb_exec_irep(mrb, self, MRB_METHOD_PROC(m), NULL); } static mrb_value @@ -659,11 +724,21 @@ mrb_value mrb_obj_instance_eval(mrb_state *mrb, mrb_value self) { mrb_value a, b; + struct RClass *c; if (mrb_get_args(mrb, "|S&", &a, &b) == 1) { mrb_raise(mrb, E_NOTIMP_ERROR, "instance_eval with string not implemented"); } - return eval_under(mrb, self, b, mrb_singleton_class_ptr(mrb, self)); + switch (mrb_type(self)) { + case MRB_TT_MODULE: + case MRB_TT_CLASS: + case MRB_TT_ICLASS: + c = mrb_class_ptr(self); + break; + default: + c = mrb_singleton_class_ptr(mrb, self); + } + return eval_under(mrb, self, b, c); } MRB_API mrb_value @@ -750,7 +825,7 @@ mrb_yield_cont(mrb_state *mrb, mrb_value b, mrb_value self, mrb_int argc, const mrb->c->ci->stack[1] = mrb_ary_new_from_values(mrb, argc, argv); mrb->c->ci->stack[2] = mrb_nil_value(); ci->argc = -1; - return mrb_exec_irep(mrb, self, p); + return mrb_exec_irep(mrb, self, p, NULL); } static struct RBreak* @@ -1012,7 +1087,7 @@ mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *pc) const struct mrb_irep_catch_handler *ch; #ifdef DIRECT_THREADED - static void *optable[] = { + static const void * const optable[] = { #define OPCODE(x,_) &&L_OP_ ## x, #include "mruby/ops.h" #undef OPCODE diff --git a/tasks/bin.rake b/tasks/bin.rake index bc8820b66..5c764458d 100644 --- a/tasks/bin.rake +++ b/tasks/bin.rake @@ -6,8 +6,8 @@ MRuby.each_target do |build| build.bins.each{|bin| build.products << define_installer_if_needed(bin)} - linker_attrs = build.gems.linker_attrs build.gems.each do |gem| + linker_attrs = build.gems.linker_attrs(gem) gem.bins.each do |bin| exe = build.exefile("#{build.build_dir}/bin/#{bin}") objs = Dir["#{gem.dir}/tools/#{bin}/*.{c,cpp,cxx,cc}"].map do |f| diff --git a/tasks/libmruby.rake b/tasks/libmruby.rake index 23cd992ff..8cdb4ca2e 100644 --- a/tasks/libmruby.rake +++ b/tasks/libmruby.rake @@ -16,14 +16,15 @@ MRuby.each_target do open(t.name, 'w') do |f| f.puts "MRUBY_CFLAGS = #{cc.all_flags}" - gem_flags = gems.map { |g| g.linker.flags } - gem_library_paths = gems.map { |g| g.linker.library_paths } + libgems = gems.reject{|g| g.bin?} + gem_flags = libgems.map {|g| g.linker.flags } + gem_library_paths = libgems.map {|g| g.linker.library_paths } f.puts "MRUBY_LDFLAGS = #{linker.all_flags(gem_library_paths, gem_flags)} #{linker.option_library_path % "#{build_dir}/lib"}" - gem_flags_before_libraries = gems.map { |g| g.linker.flags_before_libraries } + gem_flags_before_libraries = libgems.map {|g| g.linker.flags_before_libraries } f.puts "MRUBY_LDFLAGS_BEFORE_LIBS = #{[linker.flags_before_libraries, gem_flags_before_libraries].flatten.join(' ')}" - gem_libraries = gems.map { |g| g.linker.libraries } + gem_libraries = libgems.map {|g| g.linker.libraries } f.puts "MRUBY_LIBS = #{linker.option_library % 'mruby'} #{linker.library_flags(gem_libraries)}" f.puts "MRUBY_LIBMRUBY_PATH = #{libmruby_static}" diff --git a/tasks/mrbgems.rake b/tasks/mrbgems.rake index ad98f7356..509f5164f 100644 --- a/tasks/mrbgems.rake +++ b/tasks/mrbgems.rake @@ -94,7 +94,7 @@ LEGAL Additional Licenses -Due to the reason that you choosed additional mruby packages (GEMS), +Due to the reason that you chose additional mruby packages (GEMS), please check the following additional licenses too: GEMS_LEGAL diff --git a/tasks/mrblib.rake b/tasks/mrblib.rake index 5567515d6..485375e55 100644 --- a/tasks/mrblib.rake +++ b/tasks/mrblib.rake @@ -28,7 +28,7 @@ MRuby.each_target do f.puts %Q[#include <mruby.h>] f.puts %Q[#include <mruby/irep.h>] end - mrbc.run f, rbfiles, "mrblib_#{suffix}", cdump + mrbc.run f, rbfiles, "mrblib_#{suffix}", cdump: cdump, static: true f.puts %Q[void] f.puts %Q[mrb_init_mrblib(mrb_state *mrb)] f.puts %Q[{] diff --git a/tasks/presym.rake b/tasks/presym.rake index 2efc4d790..1ebc1a737 100644 --- a/tasks/presym.rake +++ b/tasks/presym.rake @@ -17,7 +17,7 @@ MRuby.each_target do |build| build.gems.each{|gem| gem.compilers.each{|c| c.include_paths << include_dir}} prereqs = {} - pps = [] + ppps = [] build_dir = "#{build.build_dir}/" mrbc_build_dir = "#{build.mrbc_build.build_dir}/" if build.mrbc_build build.products.each{|product| all_prerequisites.(product, prereqs)} @@ -25,11 +25,15 @@ MRuby.each_target do |build| next unless File.extname(prereq) == build.exts.object next unless prereq.start_with?(build_dir) next if mrbc_build_dir && prereq.start_with?(mrbc_build_dir) - pps << prereq.ext(build.exts.presym_preprocessed) + ppp = prereq.ext(build.exts.presym_preprocessed) + if Rake.application.lookup(ppp) || + Rake.application.enhance_with_matching_rule(ppp) + ppps << ppp + end end - file presym.list_path => pps do - presyms = presym.scan(pps) + file presym.list_path => ppps do + presyms = presym.scan(ppps) current_presyms = presym.read_list if File.exist?(presym.list_path) update = presyms != current_presyms presym.write_list(presyms) if update diff --git a/tasks/test.rake b/tasks/test.rake index a18635cc6..32a03fce6 100644 --- a/tasks/test.rake +++ b/tasks/test.rake @@ -10,7 +10,7 @@ namespace :test do |test_ns| end desc "build and run command binaries tests" - task :bin => :all do + task :bin => "rake:all" do test_ns["run:bin"].invoke end @@ -19,9 +19,10 @@ namespace :test do |test_ns| namespace :build do |test_build_ns| desc "build library tests" - task :lib => :all do + task :lib => "rake:all" do MRuby.each_target{|build| build.gem(core: 'mruby-test')} - test_build_ns["lib_without_loading_gem"].invoke + test = test_build_ns["lib_without_loading_gem"] + test.invoke if test end end diff --git a/tasks/toolchains/android.rake b/tasks/toolchains/android.rake index 2368b93b5..48526bc43 100644 --- a/tasks/toolchains/android.rake +++ b/tasks/toolchains/android.rake @@ -300,7 +300,7 @@ Higher NDK version will be use. case RUBY_PLATFORM when /mswin|mingw|win32/ - # Build for Android dont need window flag + # Build for Android don't need window flag flags += %W(-U_WIN32 -U_WIN64) end diff --git a/test/t/basicobject.rb b/test/t/basicobject.rb index f33171266..c5aa3f171 100644 --- a/test/t/basicobject.rb +++ b/test/t/basicobject.rb @@ -8,4 +8,3 @@ end assert('BasicObject superclass') do assert_nil(BasicObject.superclass) end - diff --git a/test/t/hash.rb b/test/t/hash.rb index c51af03aa..a5e51d83b 100644 --- a/test/t/hash.rb +++ b/test/t/hash.rb @@ -944,6 +944,14 @@ assert('Hash#rehash') do h = {} assert_same(h, h.rehash) assert_predicate(h, :empty?) + + h = {} + (1..17).each{h[_1] = _1 * 2} + (2..16).each{h.delete(_1)} + assert_same(h, h.rehash) + assert_equal([[1, 2], [17, 34]], h.to_a) + assert_equal(2, h.size) + [1, 17].each{assert_equal(_1 * 2, h[_1])} end assert('#eql? receiver should be specified key') do diff --git a/test/t/iterations.rb b/test/t/iterations.rb index f227a6037..9611388ea 100644 --- a/test/t/iterations.rb +++ b/test/t/iterations.rb @@ -58,4 +58,4 @@ assert('next expression', '11.5.2.4.4') do end all end -end
\ No newline at end of file +end diff --git a/test/t/object.rb b/test/t/object.rb index 6a755d3ba..b65f298e6 100644 --- a/test/t/object.rb +++ b/test/t/object.rb @@ -8,4 +8,3 @@ end assert('Object superclass', '15.2.1.2') do assert_equal BasicObject, Object.superclass end - |
